/[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 50 by andrew.betts, Wed Feb 27 13:55:35 2008 UTC
# Line 77  sub listChannels { Line 77  sub listChannels {
77          $list;          $list;
78  }  }
79    
80    sub listChannelsUsingTemplate {
81            my $class=shift;
82            my $template=shift;
83            
84            return '' unless(defined($template) && $template ne '');
85            
86            my $list='';
87            foreach my $channelName (sort keys %Channels)
88            {
89                    my $channel=$Channels{$channelName};
90                    
91                    $list.=$channel->descriptionWithTemplate($template);
92            }
93            
94            $list;
95    }
96    
97  sub deleteChannel {  sub deleteChannel {
98          my $class=shift;          my $class=shift;
99          my $channelName=shift;          my $channelName=shift;
# Line 152  sub addSubscriber { Line 169  sub addSubscriber {
169          my $subscriber=shift;          my $subscriber=shift;
170          my $startId=shift;          my $startId=shift;
171          my $persist=shift;          my $persist=shift;
172            my $mode=shift || '';
173            my $userAgent=shift || '';
174                    
175          # Note: negative $startId means go back that many messages          # Note: negative $startId means go back that many messages
176            my $startIndex=$self->indexForMessageID($startId);
177            my $logStartIndex = $startIndex || $self->lastMsgID() || 0;
178                    
179          push(@{$self->{'subscribers'}},$subscriber) if($persist);          push(@{$self->{'subscribers'}},$subscriber) if($persist);
180                    
181          my $startIndex=$self->indexForMessageID($startId);          &::syslog('info','',
182                    'joinchannel',
183                    $subscriber->{'subscriberID'},
184                    $self->{'name'},
185                    $mode,
186                    $logStartIndex,
187                    $userAgent
188            );
189            
190          return unless(defined($startIndex));          return unless(defined($startIndex));
191                    
192          my $msgCount=scalar(@{$self->{'messages'}});          my $msgCount=scalar(@{$self->{'messages'}});
# Line 165  sub addSubscriber { Line 194  sub addSubscriber {
194                    
195          $startIndex=0 if($startIndex<0);          $startIndex=0 if($startIndex<0);
196                    
197          my $numMsgToSend=0;          if($startIndex<$msgCount) {
198          while($startIndex<$msgCount)                  $subscriber->sendMessages(@{$self->{'messages'}}[$startIndex..$msgCount-1]);
         {  
                 my $message=$self->{'messages'}->[$startIndex++];  
                   
                 $txt.=$message->message();  
                 $numMsgToSend++;  
199          }          }
           
         $subscriber->sendMessage($txt,$numMsgToSend);  
200  }  }
201    
202  sub removeSubscriber {  sub removeSubscriber {
203          my $self=shift;          my $self=shift;
204          my $subscriber=shift;          my $subscriber=shift;
205            my $reason=shift ||'unknown';
206                    
207          my $idx=undef;          my $idx=undef;
208          for(my $i=0;$i<scalar(@{$self->{'subscribers'}});$i++)          my $numsubs = scalar(@{$self->{'subscribers'}});
209            for(my $i=0;$i<$numsubs;$i++)
210          {          {
211                  if($self->{'subscribers'}->[$i]==$subscriber)                  if($self->{'subscribers'}->[$i]==$subscriber)
212                  {                  {
# Line 194  sub removeSubscriber { Line 218  sub removeSubscriber {
218          if(defined($idx))          if(defined($idx))
219          {          {
220                  splice(@{$self->{'subscribers'}},$idx,1);                  splice(@{$self->{'subscribers'}},$idx,1);
221                    
222                    my $timeConnected = time - $subscriber->{'ConnectionStart'};
223                    &::syslog('info','',
224                            'leavechannel',
225                            $subscriber->{'subscriberID'},
226                            $self->{'name'},
227                            $timeConnected,
228                            $subscriber->{'MessageCount'},
229                            $subscriber->{'bytesWritten'},
230                            $reason
231                    );
232          }          }
233                    
234          $self->checkExpiration();          $self->checkExpiration();
# Line 213  sub addMessage { Line 248  sub addMessage {
248          $message->setText($messageText);          $message->setText($messageText);
249          $message->setChannelName($self->{'name'});          $message->setChannelName($self->{'name'});
250          push(@{$self->{'messages'}},$message);          push(@{$self->{'messages'}},$message);
251            &::syslog('debug',"New message ".$message->{"id"}." on channel ".$self->{'name'});
252                    
253          $self->trimMessageStoreBySize();          $self->trimMessageStoreBySize();
254                    
255          my $text=$message->message();          map { $_->sendMessages($message) } @{$self->{'subscribers'}};
256          map { $_->sendMessage($text) } @{$self->{'subscribers'}};          
257            $message;
258  }  }
259    
260  sub messageCount {  sub messageCount {
# Line 282  sub indexForMessageID { Line 319  sub indexForMessageID {
319          #          #
320          return undef unless(defined($id));          return undef unless(defined($id));
321                    
322          my $numMessages=scalar(scalar(@{$self->{'messages'}}));          my $numMessages=scalar(@{$self->{'messages'}});
323                    
324          return undef unless($numMessages);          return undef unless($numMessages);
325          return -1 unless($id ne '');          return -1 unless($id ne '');
# Line 317  sub indexForMessageID { Line 354  sub indexForMessageID {
354          return $low;          return $low;
355  }  }
356    
357    sub lastMsgID {
358            my $self=shift;
359            my $numMessages=scalar(@{$self->{'messages'}});
360            return undef unless($numMessages>0);
361            @{$self->{'messages'}}[-1]->id();
362    }
363    
364    sub descriptionWithTemplate {
365            my $self=shift;
366            my $template=shift;
367            
368            $template=~s/~([a-zA-Z0-9_]*)~/
369                    if(!defined($1) || $1 eq '') {
370                            '~';
371                    } elsif($1 eq 'messageCount') {
372                            $self->messageCount();
373                    } elsif($1 eq 'subscriberCount') {
374                            $self->subscriberCount();
375                    } elsif($1 eq 'lastMsgID') {
376                            $self->lastMsgID();
377                    } elsif($1 eq 'name') {
378                            $self->{'name'};
379                    } else {
380                            '';
381                    }
382            /gex;
383            
384            $template;
385    }
386    
387  1;  1;
388  ############################################################################EOF  ############################################################################EOF

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

  ViewVC Help
Powered by ViewVC 1.1.26