/[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 11 by knops.gerd, Thu Dec 14 16:29:42 2006 UTC revision 13 by knops.gerd, Mon Apr 30 18:16:17 2007 UTC
# Line 132  sub processLine { Line 132  sub processLine {
132                          my $startIndex=undef;                          my $startIndex=undef;
133                          my $backtrack=undef;                          my $backtrack=undef;
134                          my $persist=1;                          my $persist=1;
135                            my $anyPersist=0;
136                          my $subscriberID=undef;                          my $subscriberID=undef;
137                            my $channels={};
138                          foreach my $formElement (@formData)                          foreach my $formElement (@formData)
139                          {                          {
140                                  if($formElement=~/^channel=(.+)$/)                                  if($formElement=~/^channel=(.+)$/)
141                                  {                                  {
142                                            if(defined($channelName))
143                                            {
144                                                    if(defined($startIndex) && defined($backtrack))
145                                                    {
146                                                            $self->emitHeader("404 Cannot use both 'restartfrom' and 'backtrack'");
147                                                            $self->close();
148                                                            
149                                                            return;
150                                                    }
151                                                    
152                                                    $startIndex=-$backtrack if(!defined($startIndex) && defined($backtrack));
153                                                    $channels->{$channelName}->{'startIndex'}=$startIndex;
154                                                    $channels->{$channelName}->{'persist'}=$persist;
155                                                    $anyPersist|=$persist;
156                                                    
157                                                    $startIndex=undef;
158                                                    $backtrack=undef;
159                                                    $persist=1;
160                                            }
161                                          $channelName=$1;                                          $channelName=$1;
162                                  }                                  }
163                                  elsif($formElement=~/^restartfrom=(\d*)$/)                                  elsif($formElement=~/^restartfrom=(\d*)$/)
# Line 176  sub processLine { Line 197  sub processLine {
197                                          }                                          }
198                                  }                                  }
199                          }                          }
                                                   
                         delete($self->{'headerBuffer'});  
200                                                    
201                          if(defined($startIndex) && defined($backtrack))                          if(defined($channelName))
202                          {                          {
203                                  $self->emitHeader("404 Cannot use both 'restartfrom' and 'backtrack'");                                  if(defined($startIndex) && defined($backtrack))
204                                  $self->close();                                  {
205                                            $self->emitHeader("404 Cannot use both 'restartfrom' and 'backtrack'");
206                                            $self->close();
207                                            
208                                            return;
209                                    }
210                                                                    
211                                  return;                                  $startIndex=-$backtrack if(!defined($startIndex) && defined($backtrack));
212                                    $channels->{$channelName}->{'startIndex'}=$startIndex;
213                                    $channels->{$channelName}->{'persist'}=$persist;
214                                    $anyPersist|=$persist;
215                          }                          }
216                                                    
217                          if(defined($subscriberID) && $persist)                          delete($self->{'headerBuffer'});
218                            
219                            if(defined($subscriberID) && $anyPersist)
220                          {                          {
221                                  $self->{'subscriberID'}=$subscriberID;                                  $self->{'subscriberID'}=$subscriberID;
222                                  $self->deleteSubscriberWithID($subscriberID);                                  $self->deleteSubscriberWithID($subscriberID);
223                                  $PersistentConnections{$subscriberID}=$self;                                  $PersistentConnections{$subscriberID}=$self;
224                          }                          }
225                                                    
226                          if(defined($channelName))                          if(scalar(keys %{$channels}))
227                          {                          {
228                                  $self->emitOKHeader();                                  $self->emitOKHeader();
229                                                                    
230                                  $startIndex=-$backtrack if(!defined($startIndex) && defined($backtrack));                                  $self->setChannels($channels);
                                   
                                 $self->setChannelName($channelName,$startIndex,$persist);  
231                                                                    
232                                  $self->close(1) unless($persist);                                  $self->close(1) unless($anyPersist);
233                                                                    
234                                  return;                                  return;
235                          }                          }
# Line 223  sub processLine { Line 250  sub processLine {
250          }          }
251  }  }
252    
253  sub setChannelName {  sub setChannels {
254          my $self=shift;          my $self=shift;
255          my $channelName=shift;          my $channels=shift;
         my $startIndex=shift;  
         my $persist=shift;  
           
         my $channel=Meteor::Channel->channelWithName($channelName);  
         $self->{'channel'}=$channel if($persist);  
256                    
257          $channel->addSubscriber($self,$startIndex,$persist);          foreach my $channelName (keys %{$channels})
258            {
259                    my $persist=$channels->{$channelName}->{'persist'};
260                    my $startIndex=$channels->{$channelName}->{'startIndex'};
261                    
262                    my $channel=Meteor::Channel->channelWithName($channelName);
263                    
264                    $self->{'channels'}->{$channelName}=$channel if($persist);
265                    
266                    $channel->addSubscriber($self,$startIndex,$persist);
267            }
268  }  }
269    
270  sub emitOKHeader {  sub emitOKHeader {
# Line 309  sub sendMessage { Line 341  sub sendMessage {
341          }          }
342  }  }
343    
344    sub closeChannel {
345            my $self=shift;
346            my $channelName=shift;
347            
348            return unless(exists($self->{'channels'}->{$channelName}));
349            
350            my $channel=$self->{'channels'}->{$channelName};
351            $channel->removeSubscriber($self);
352            
353            delete($self->{'channels'}->{$channelName});
354            
355            $self->close() if(scalar(keys %{$self->{'channels'}})==0);
356    }
357    
358  sub close {  sub close {
359          my $self=shift;          my $self=shift;
360          my $noShutdownMsg=shift;          my $noShutdownMsg=shift;
361                    
362          $self->{'channel'}->removeSubscriber($self) if($self->{'channel'});          foreach my $channelName (keys %{$self->{'channels'}})
363          delete($self->{'channel'});          {
364                    my $channel=$self->{'channels'}->{$channelName};
365                    $channel->removeSubscriber($self);
366            }
367            delete($self->{'channels'});
368                    
369          if(exists($self->{'subscriberID'}))          if(exists($self->{'subscriberID'}))
370          {          {

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

  ViewVC Help
Powered by ViewVC 1.1.26