From aa534c69f042f0353d25a57b1394b6011cb06b76 Mon Sep 17 00:00:00 2001 From: Joshua Spence Date: Wed, 11 Jun 2014 14:08:58 -0700 Subject: [PATCH] Move subscription updates to the `register` function. Summary: Currently, the `AphlictClient` will only send its subscriptions to the `AphlictMaster` once. If the original `AphlictMaster` is closed and a new master is created, then client subscriptions will be lost. Test Plan: Opened two separate tabs. Closed the "master" tab and noticed that the subscriptions were re-sent to the server. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: epriestley, Korvin Differential Revision: https://secure.phabricator.com/D9487 --- resources/celerity/map.php | 2 +- support/aphlict/client/src/AphlictClient.as | 27 +++++++++++++++----- webroot/rsrc/swf/aphlict.swf | Bin 6029 -> 6079 bytes 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/resources/celerity/map.php b/resources/celerity/map.php index cd0e6e47d2..ee0a55a199 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -477,7 +477,7 @@ return array( 'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8', 'rsrc/js/phuix/PHUIXActionView.js' => '6e8cefa4', 'rsrc/js/phuix/PHUIXDropdownMenu.js' => 'bd4c8dca', - 'rsrc/swf/aphlict.swf' => 'd9bca85d', + 'rsrc/swf/aphlict.swf' => '2dea6ddc', ), 'symbols' => array( diff --git a/support/aphlict/client/src/AphlictClient.as b/support/aphlict/client/src/AphlictClient.as index 2be41e98a6..dbde016a1a 100644 --- a/support/aphlict/client/src/AphlictClient.as +++ b/support/aphlict/client/src/AphlictClient.as @@ -31,6 +31,7 @@ package { private var remoteServer:String; private var remotePort:Number; + private var subscriptions:Array; public function AphlictClient() { @@ -51,8 +52,9 @@ package { this.externalInvoke('connect'); - this.remoteServer = server; - this.remotePort = port; + this.remoteServer = server; + this.remotePort = port; + this.subscriptions = subscriptions; this.client = AphlictClient.generateClientId(); this.recv.connect(this.client); @@ -61,10 +63,6 @@ package { this.timer.addEventListener(TimerEvent.TIMER, this.keepalive); this.connectToMaster(); - - // Send subscriptions to master. - this.log('Sending subscriptions to master.'); - this.send.send('aphlict_master', 'subscribe', this.client, subscriptions); } /** @@ -95,11 +93,26 @@ package { this.error(err); } + this.registerWithMaster(); + this.timer.start(); + } + + /** + * Register our client ID with the @{class:AphlictMaster} and send our + * subscriptions. + */ + private function registerWithMaster():void { this.send.send('aphlict_master', 'register', this.client); this.expiry = new Date().getTime() + (5 * AphlictClient.INTERVAL); this.log('Registered client ' + this.client); - this.timer.start(); + // Send subscriptions to master. + this.log('Sending subscriptions to master.'); + this.send.send( + 'aphlict_master', + 'subscribe', + this.client, + this.subscriptions); } /** diff --git a/webroot/rsrc/swf/aphlict.swf b/webroot/rsrc/swf/aphlict.swf index e599e5b50ad2d1a9ba03400b0b3a4e19dcf66704..51be4530c3a7ac0cf5af6a340d4597ee908790a9 100644 GIT binary patch literal 6079 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 FshH>*!_xo& literal 6029 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 H_yU!mR#u_-