/[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 11 by knops.gerd, Thu Dec 14 16:29:42 2006 UTC revision 47 by knops.gerd, Mon Feb 4 21:06:42 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 99  sub clearAllBuffers { Line 116  sub clearAllBuffers {
116          map { $_->clearBuffer() } (values %Channels);          map { $_->clearBuffer() } (values %Channels);
117  }  }
118    
119    sub numChannels {
120            
121            return scalar(keys %Channels);
122    }
123    
124  ###############################################################################  ###############################################################################
125  # Factory methods  # Factory methods
126  ###############################################################################  ###############################################################################
# Line 132  sub DESTROY { Line 154  sub DESTROY {
154          my $self=shift;          my $self=shift;
155                    
156          my @subscribers=@{$self->{'subscribers'}};          my @subscribers=@{$self->{'subscribers'}};
157          map { $_->close() } @subscribers;          map { $_->closeChannel($self->{'name'}) } @subscribers;
158  }  }
159    
160  ###############################################################################  ###############################################################################
# Line 147  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                    
177          push(@{$self->{'subscribers'}},$subscriber) if($persist);          push(@{$self->{'subscribers'}},$subscriber) if($persist);
178                    
179            &::syslog('info','',
180                    'joinchannel',
181                    $subscriber->{'subscriberID'},
182                    $self->{'name'},
183                    $mode,
184                    $startId,
185                    $userAgent
186            );
187            
188          my $startIndex=$self->indexForMessageID($startId);          my $startIndex=$self->indexForMessageID($startId);
189          return unless(defined($startIndex));          return unless(defined($startIndex));
190                    
# Line 160  sub addSubscriber { Line 193  sub addSubscriber {
193                    
194          $startIndex=0 if($startIndex<0);          $startIndex=0 if($startIndex<0);
195                    
196          while($startIndex<$msgCount)          if($startIndex<$msgCount)
197          {          {
198                  my $message=$self->{'messages'}->[$startIndex++];                  $subscriber->sendMessages(@{$self->{'messages'}}[$startIndex,$msgCount-1]);
                   
                 $txt.=$message->message();  
199          }          }
           
         $subscriber->sendMessage($txt);  
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++)          for(my $i=0;$i<scalar(@{$self->{'subscribers'}});$i++)
# Line 187  sub removeSubscriber { Line 217  sub removeSubscriber {
217          if(defined($idx))          if(defined($idx))
218          {          {
219                  splice(@{$self->{'subscribers'}},$idx,1);                  splice(@{$self->{'subscribers'}},$idx,1);
220                    
221                    &::syslog('info','',
222                            'leavechannel',
223                            $subscriber->{'subscriberID'},
224                            $self->{'name'},
225                            $subscriber->{'ConnectionStart'},
226                            $subscriber->{'MessageCount'},
227                            $subscriber->{'bytesWritten'},
228                            $reason
229                    );
230          }          }
231                    
232          $self->checkExpiration();          $self->checkExpiration();
# Line 203  sub addMessage { Line 243  sub addMessage {
243          my $messageText=shift;          my $messageText=shift;
244                    
245          my $message=Meteor::Message->newWithID($MessageID++);          my $message=Meteor::Message->newWithID($MessageID++);
246          $message->setText($messageText);                  $message->setText($messageText);
247            $message->setChannelName($self->{'name'});
248          push(@{$self->{'messages'}},$message);          push(@{$self->{'messages'}},$message);
249                    
250          $self->trimMessageStoreBySize();          $self->trimMessageStoreBySize();
251                    
252          my $text=$message->message();          map { $_->sendMessages($message) } @{$self->{'subscribers'}};
253          map { $_->sendMessage($text) } @{$self->{'subscribers'}};          
254            $message;
255  }  }
256    
257  sub messageCount {  sub messageCount {
# Line 274  sub indexForMessageID { Line 316  sub indexForMessageID {
316          #          #
317          return undef unless(defined($id));          return undef unless(defined($id));
318                    
319          my $numMessages=scalar(scalar(@{$self->{'messages'}}));          my $numMessages=scalar(@{$self->{'messages'}});
320                    
321          return undef unless($numMessages);          return undef unless($numMessages);
322          return -1 unless($id ne '');          return -1 unless($id ne '');
# Line 309  sub indexForMessageID { Line 351  sub indexForMessageID {
351          return $low;          return $low;
352  }  }
353    
354    sub lastMsgID {
355            my $self=shift;
356            
357            my $numMessages=scalar(@{$self->{'messages'}});
358            
359            return 'undefined' unless($numMessages>0);
360            
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                            '~';
372                    }
373                    elsif($1 eq 'messageCount')
374                    {
375                            $self->messageCount();
376                    }
377                    elsif($1 eq 'subscriberCount')
378                    {
379                            $self->subscriberCount();
380                    }
381                    elsif($1 eq 'lastMsgID')
382                    {
383                            $self->lastMsgID();
384                    }
385                    
386                    elsif(exists($self->{$1}))
387                    {
388                            $self->{$1};
389                    }
390                    else
391                    {
392                            '';
393                    }
394            /gex;
395            
396            $template;
397    }
398    
399  1;  1;
400  ############################################################################EOF  ############################################################################EOF

Legend:
Removed from v.11  
changed lines
  Added in v.47

  ViewVC Help
Powered by ViewVC 1.1.26