/[meteor]/googlecode.com/svn/trunk/Meteor/Channel.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /googlecode.com/svn/trunk/Meteor/Channel.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 25 by knops.gerd, Sun May 20 19:40:53 2007 UTC revision 64 by andrew.betts, Mon Jan 19 11:19:41 2009 UTC
# Line 4  Line 4 
4  #   An HTTP server for the 2.0 web  #   An HTTP server for the 2.0 web
5  #   Copyright (c) 2006 contributing authors  #   Copyright (c) 2006 contributing authors
6  #  #
7  #   Subscriber.pm  #   Channel.pm
8  #  #
9  #       Description:  #       Description:
10  #       A Meteor Channel  #       A Meteor Channel
# Line 152  sub addSubscriber { Line 152  sub addSubscriber {
152          my $subscriber=shift;          my $subscriber=shift;
153          my $startId=shift;          my $startId=shift;
154          my $persist=shift;          my $persist=shift;
155            my $mode=shift || '';
156            my $userAgent=shift || '';
157                    
158          # Note: negative $startId means go back that many messages          # Note: negative $startId means go back that many messages
159            my $startIndex=$self->indexForMessageID($startId);
160            my $logStartIndex = $startIndex || $self->lastMsgID() || 0;
161                    
162          push(@{$self->{'subscribers'}},$subscriber) if($persist);          push(@{$self->{'subscribers'}},$subscriber) if($persist);
163                    
164          my $startIndex=$self->indexForMessageID($startId);          &::syslog('info','',
165                    'joinchannel',
166                    $subscriber->{'socketFN'},
167                    $self->{'name'},
168                    $logStartIndex
169            );
170            
171          return unless(defined($startIndex));          return unless(defined($startIndex));
172                    
173          my $msgCount=scalar(@{$self->{'messages'}});          my $msgCount=scalar(@{$self->{'messages'}});
# Line 165  sub addSubscriber { Line 175  sub addSubscriber {
175                    
176          $startIndex=0 if($startIndex<0);          $startIndex=0 if($startIndex<0);
177                    
178          my $numMsgToSend=0;          if($startIndex<$msgCount) {
179          while($startIndex<$msgCount)                  $subscriber->sendMessages(@{$self->{'messages'}}[$startIndex..$msgCount-1]);
         {  
                 my $message=$self->{'messages'}->[$startIndex++];  
                   
                 $txt.=$message->message();  
                 $numMsgToSend++;  
180          }          }
           
         $subscriber->sendMessage($txt,$numMsgToSend);  
181  }  }
182    
183  sub removeSubscriber {  sub removeSubscriber {
184          my $self=shift;          my $self=shift;
185          my $subscriber=shift;          my $subscriber=shift;
186            my $reason=shift ||'unknown';
187                    
188          my $idx=undef;          my $idx=undef;
189          for(my $i=0;$i<scalar(@{$self->{'subscribers'}});$i++)          my $numsubs = scalar(@{$self->{'subscribers'}});
190          {  
191                  if($self->{'subscribers'}->[$i]==$subscriber)          for (my $i=0; $i<$numsubs; $i++) {
192                  {                  if($self->{'subscribers'}->[$i]==$subscriber) {
193                          $idx=$i;                          $idx=$i;
194                          last;                          last;
195                  }                  }
# Line 194  sub removeSubscriber { Line 198  sub removeSubscriber {
198          if(defined($idx))          if(defined($idx))
199          {          {
200                  splice(@{$self->{'subscribers'}},$idx,1);                  splice(@{$self->{'subscribers'}},$idx,1);
201                    
202                    my $timeConnected = time - $subscriber->{'connectionStart'};
203                    &::syslog('info','',
204                            'leavechannel',
205                            $subscriber->{'socketFN'},
206                            $self->{'name'},
207                            $subscriber->{'ip'},
208                            $subscriber->{'subscriberID'},
209                            $timeConnected,
210                            $subscriber->{'messageCount'},
211                            $subscriber->{'bytesWritten'},
212                            $reason
213                    );
214          }          }
215                    
216          $self->checkExpiration();          $self->checkExpiration();
# Line 213  sub addMessage { Line 230  sub addMessage {
230          $message->setText($messageText);          $message->setText($messageText);
231          $message->setChannelName($self->{'name'});          $message->setChannelName($self->{'name'});
232          push(@{$self->{'messages'}},$message);          push(@{$self->{'messages'}},$message);
233            &::syslog('debug',"New message ".$message->{"id"}." on channel ".$self->{'name'});
234                    
235          $self->trimMessageStoreBySize();          $self->trimMessageStoreBySize();
236                    
237          my $text=$message->message();          map { $_->sendMessages($message) } @{$self->{'subscribers'}};
238          map { $_->sendMessage($text) } @{$self->{'subscribers'}};          
239            $message;
240  }  }
241    
242  sub messageCount {  sub messageCount {
# Line 282  sub indexForMessageID { Line 301  sub indexForMessageID {
301          #          #
302          return undef unless(defined($id));          return undef unless(defined($id));
303                    
304          my $numMessages=scalar(scalar(@{$self->{'messages'}}));          my $numMessages=scalar(@{$self->{'messages'}});
305                    
306          return undef unless($numMessages);          return undef unless($numMessages);
307          return -1 unless($id ne '');          return -1 unless($id ne '');
# Line 317  sub indexForMessageID { Line 336  sub indexForMessageID {
336          return $low;          return $low;
337  }  }
338    
339    sub lastMsgID {
340            my $self=shift;
341            my $numMessages=scalar(@{$self->{'messages'}});
342            return undef unless($numMessages>0);
343            @{$self->{'messages'}}[-1]->id();
344    }
345    
346    sub descriptionWithTemplate {
347            my $self=shift;
348            my $template=shift;
349            
350            return '' unless(defined($template) && $template ne '');
351            
352            $template=~s/~([a-zA-Z0-9_]*)~/
353                    if(!defined($1) || $1 eq '') {
354                            '~';
355                    } elsif($1 eq 'messageCount') {
356                            $self->messageCount();
357                    } elsif($1 eq 'subscriberCount') {
358                            $self->subscriberCount();
359                    } elsif($1 eq 'lastMsgID') {
360                            $self->lastMsgID() || 1;
361                    } elsif($1 eq 'name') {
362                            $self->{'name'};
363                    } else {
364                            '';
365                    }
366            /gex;
367            
368            $template;
369    }
370    
371  1;  1;
372  ############################################################################EOF  ############################################################################EOF

Legend:
Removed from v.25  
changed lines
  Added in v.64

  ViewVC Help
Powered by ViewVC 1.1.26