/[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 13 by knops.gerd, Mon Apr 30 18:16:17 2007 UTC revision 58 by andrew.betts, Thu Mar 6 08:29:39 2008 UTC
# Line 99  sub clearAllBuffers { Line 99  sub clearAllBuffers {
99          map { $_->clearBuffer() } (values %Channels);          map { $_->clearBuffer() } (values %Channels);
100  }  }
101    
102    sub numChannels {
103            
104            return scalar(keys %Channels);
105    }
106    
107  ###############################################################################  ###############################################################################
108  # Factory methods  # Factory methods
109  ###############################################################################  ###############################################################################
# Line 147  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->{'ip'},
167                    $subscriber->{'subscriberID'},
168                    $self->{'name'},
169                    $mode,
170                    $logStartIndex,
171                    $userAgent
172            );
173            
174          return unless(defined($startIndex));          return unless(defined($startIndex));
175                    
176          my $msgCount=scalar(@{$self->{'messages'}});          my $msgCount=scalar(@{$self->{'messages'}});
# Line 160  sub addSubscriber { Line 178  sub addSubscriber {
178                    
179          $startIndex=0 if($startIndex<0);          $startIndex=0 if($startIndex<0);
180                    
181          while($startIndex<$msgCount)          if($startIndex<$msgCount) {
182          {                  $subscriber->sendMessages(@{$self->{'messages'}}[$startIndex..$msgCount-1]);
                 my $message=$self->{'messages'}->[$startIndex++];  
                   
                 $txt.=$message->message();  
183          }          }
           
         $subscriber->sendMessage($txt);  
184  }  }
185    
186  sub removeSubscriber {  sub removeSubscriber {
187          my $self=shift;          my $self=shift;
188          my $subscriber=shift;          my $subscriber=shift;
189            my $reason=shift ||'unknown';
190                    
191          my $idx=undef;          my $idx=undef;
192          for(my $i=0;$i<scalar(@{$self->{'subscribers'}});$i++)          my $numsubs = scalar(@{$self->{'subscribers'}});
193          {  
194                  if($self->{'subscribers'}->[$i]==$subscriber)          for (my $i=0; $i<$numsubs; $i++) {
195                  {                  if($self->{'subscribers'}->[$i]==$subscriber) {
196                          $idx=$i;                          $idx=$i;
197                          last;                          last;
198                  }                  }
# Line 187  sub removeSubscriber { Line 201  sub removeSubscriber {
201          if(defined($idx))          if(defined($idx))
202          {          {
203                  splice(@{$self->{'subscribers'}},$idx,1);                  splice(@{$self->{'subscribers'}},$idx,1);
204                    
205                    my $timeConnected = time - $subscriber->{'ConnectionStart'};
206                    &::syslog('info','',
207                            'leavechannel',
208                            $subscriber->{'ip'},
209                            $subscriber->{'subscriberID'},
210                            $self->{'name'},
211                            $timeConnected,
212                            $subscriber->{'MessageCount'},
213                            $subscriber->{'bytesWritten'},
214                            $reason
215                    );
216          }          }
217                    
218          $self->checkExpiration();          $self->checkExpiration();
# Line 203  sub addMessage { Line 229  sub addMessage {
229          my $messageText=shift;          my $messageText=shift;
230                    
231          my $message=Meteor::Message->newWithID($MessageID++);          my $message=Meteor::Message->newWithID($MessageID++);
232          $message->setText($messageText);                  $message->setText($messageText);
233            $message->setChannelName($self->{'name'});
234          push(@{$self->{'messages'}},$message);          push(@{$self->{'messages'}},$message);
235            &::syslog('debug',"New message ".$message->{"id"}." on channel ".$self->{'name'});
236                    
237          $self->trimMessageStoreBySize();          $self->trimMessageStoreBySize();
238                    
239          my $text=$message->message();          map { $_->sendMessages($message) } @{$self->{'subscribers'}};
240          map { $_->sendMessage($text) } @{$self->{'subscribers'}};          
241            $message;
242  }  }
243    
244  sub messageCount {  sub messageCount {
# Line 274  sub indexForMessageID { Line 303  sub indexForMessageID {
303          #          #
304          return undef unless(defined($id));          return undef unless(defined($id));
305                    
306          my $numMessages=scalar(scalar(@{$self->{'messages'}}));          my $numMessages=scalar(@{$self->{'messages'}});
307                    
308          return undef unless($numMessages);          return undef unless($numMessages);
309          return -1 unless($id ne '');          return -1 unless($id ne '');
# Line 309  sub indexForMessageID { Line 338  sub indexForMessageID {
338          return $low;          return $low;
339  }  }
340    
341    sub lastMsgID {
342            my $self=shift;
343            my $numMessages=scalar(@{$self->{'messages'}});
344            return undef unless($numMessages>0);
345            @{$self->{'messages'}}[-1]->id();
346    }
347    
348    sub descriptionWithTemplate {
349            my $self=shift;
350            my $template=shift;
351            
352            return '' unless(defined($template) && $template ne '');
353            
354            $template=~s/~([a-zA-Z0-9_]*)~/
355                    if(!defined($1) || $1 eq '') {
356                            '~';
357                    } elsif($1 eq 'messageCount') {
358                            $self->messageCount();
359                    } elsif($1 eq 'subscriberCount') {
360                            $self->subscriberCount();
361                    } elsif($1 eq 'lastMsgID') {
362                            $self->lastMsgID() || 1;
363                    } elsif($1 eq 'name') {
364                            $self->{'name'};
365                    } else {
366                            '';
367                    }
368            /gex;
369            
370            $template;
371    }
372    
373  1;  1;
374  ############################################################################EOF  ############################################################################EOF

Legend:
Removed from v.13  
changed lines
  Added in v.58

  ViewVC Help
Powered by ViewVC 1.1.26