/[meteor]/googlecode.com/svn/trunk/Meteor/Subscriber.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/Subscriber.pm

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

revision 3 by andrew.betts, Mon Nov 20 17:59:30 2006 UTC revision 17 by knops.gerd, Tue May 1 17:10:10 2007 UTC
# Line 133  sub processLine { Line 133  sub processLine {
133                          my $backtrack=undef;                          my $backtrack=undef;
134                          my $persist=1;                          my $persist=1;
135                          my $subscriberID=undef;                          my $subscriberID=undef;
136                            my $channels={};
137                          foreach my $formElement (@formData)                          foreach my $formElement (@formData)
138                          {                          {
139                                  if($formElement=~/^channel=(.+)$/)                                  if($formElement=~/^channel=(.+)$/)
140                                  {                                  {
141                                            if(defined($channelName))
142                                            {
143                                                    if(defined($startIndex) && defined($backtrack))
144                                                    {
145                                                            $self->emitHeader("404 Cannot use both 'restartfrom' and 'backtrack'");
146                                                            $self->close();
147                                                            
148                                                            return;
149                                                    }
150                                                    
151                                                    $startIndex=-$backtrack if(!defined($startIndex) && defined($backtrack));
152                                                    $channels->{$channelName}->{'startIndex'}=$startIndex;
153                                                    
154                                                    $startIndex=undef;
155                                                    $backtrack=undef;
156                                            }
157                                          $channelName=$1;                                          $channelName=$1;
158                                  }                                  }
159                                  elsif($formElement=~/^restartfrom=(\d*)$/)                                  elsif($formElement=~/^restartfrom=(\d*)$/)
# Line 176  sub processLine { Line 193  sub processLine {
193                                          }                                          }
194                                  }                                  }
195                          }                          }
                                                   
                         delete($self->{'headerBuffer'});  
196                                                    
197                          if(defined($startIndex) && defined($backtrack))                          if(defined($channelName))
198                          {                          {
199                                  $self->emitHeader("404 Cannot use both 'restartfrom' and 'backtrack'");                                  if(defined($startIndex) && defined($backtrack))
200                                  $self->close();                                  {
201                                            $self->emitHeader("404 Cannot use both 'restartfrom' and 'backtrack'");
202                                            $self->close();
203                                            
204                                            return;
205                                    }
206                                                                    
207                                  return;                                  $startIndex=-$backtrack if(!defined($startIndex) && defined($backtrack));
208                                    $channels->{$channelName}->{'startIndex'}=$startIndex;
209                          }                          }
210                                                    
211                            delete($self->{'headerBuffer'});
212                            
213                          if(defined($subscriberID) && $persist)                          if(defined($subscriberID) && $persist)
214                          {                          {
215                                  $self->{'subscriberID'}=$subscriberID;                                  $self->{'subscriberID'}=$subscriberID;
# Line 194  sub processLine { Line 217  sub processLine {
217                                  $PersistentConnections{$subscriberID}=$self;                                  $PersistentConnections{$subscriberID}=$self;
218                          }                          }
219                                                    
220                          if(defined($channelName))                          if(scalar(keys %{$channels}))
221                          {                          {
222                                  $self->emitOKHeader();                                  $self->emitOKHeader();
223                                                                    
224                                  $startIndex=-$backtrack if(!defined($startIndex) && defined($backtrack));                                  $self->setChannels($channels,$persist);
                                   
                                 $self->setChannelName($channelName,$startIndex,$persist);  
225                                                                    
226                                  $self->close(1) unless($persist);                                  $self->close(1) unless($persist);
227                                                                    
# Line 223  sub processLine { Line 244  sub processLine {
244          }          }
245  }  }
246    
247  sub setChannelName {  sub setChannels {
248          my $self=shift;          my $self=shift;
249          my $channelName=shift;          my $channels=shift;
         my $startIndex=shift;  
250          my $persist=shift;          my $persist=shift;
251                    
252          my $channel=Meteor::Channel->channelWithName($channelName);          foreach my $channelName (keys %{$channels})
253          $self->{'channel'}=$channel if($persist);          {
254                            my $startIndex=$channels->{$channelName}->{'startIndex'};
255          $channel->addSubscriber($self,$startIndex,$persist);                  
256                    my $channel=Meteor::Channel->channelWithName($channelName);
257                    
258                    $self->{'channels'}->{$channelName}=$channel if($persist);
259                    
260                    $channel->addSubscriber($self,$startIndex,$persist);
261            }
262  }  }
263    
264  sub emitOKHeader {  sub emitOKHeader {
# Line 309  sub sendMessage { Line 335  sub sendMessage {
335          }          }
336  }  }
337    
338    sub closeChannel {
339            my $self=shift;
340            my $channelName=shift;
341            
342            return unless(exists($self->{'channels'}->{$channelName}));
343            
344            my $channel=$self->{'channels'}->{$channelName};
345            $channel->removeSubscriber($self);
346            
347            delete($self->{'channels'}->{$channelName});
348            
349            $self->close() if(scalar(keys %{$self->{'channels'}})==0);
350    }
351    
352  sub close {  sub close {
353          my $self=shift;          my $self=shift;
354          my $noShutdownMsg=shift;          my $noShutdownMsg=shift;
355                    
356          $self->{'channel'}->removeSubscriber($self) if($self->{'channel'});          foreach my $channelName (keys %{$self->{'channels'}})
357          delete($self->{'channel'});          {
358                    my $channel=$self->{'channels'}->{$channelName};
359                    $channel->removeSubscriber($self);
360            }
361            delete($self->{'channels'});
362                    
363          if(exists($self->{'subscriberID'}))          if(exists($self->{'subscriberID'}))
364          {          {

Legend:
Removed from v.3  
changed lines
  Added in v.17

  ViewVC Help
Powered by ViewVC 1.1.26