From 6a6fdc1c41c3b6be7e987b68571cc940a5658faa Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Fri, 9 May 2014 15:00:48 -0700 Subject: [PATCH] Make the structure that we pass over the channel or pseudo-channel called an "event". Make the string that we pass through pubsub called a "message". --- api.py | 25 ++++++++++++------------- lib/models.py | 14 +++++++------- static/cosmopolite.js | 34 +++++++++++++++++----------------- 3 files changed, 36 insertions(+), 37 deletions(-) diff --git a/api.py b/api.py index c901866..d419df0 100644 --- a/api.py +++ b/api.py @@ -30,21 +30,20 @@ def CreateChannel(google_user, client, args): token = channel.create_channel( client_id=str(client.key()), duration_minutes=config.CHANNEL_DURATION_SECONDS / 60) - messages = [x.ToMessage() - for x in client.parent().GetStateEntries()] + events = [x.ToEvent() for x in client.parent().GetStateEntries()] if google_user: - messages.append({ - 'message_type': 'login', + events.append({ + 'event_type': 'login', 'google_user': google_user.email(), }) else: - messages.append({ - 'message_type': 'logout', + events.append({ + 'event_type': 'logout', }) return { 'token': token, - 'messages': messages, + 'events': events, } @@ -79,11 +78,11 @@ def SetValue(google_user, client, args): public=public) entry.put() - msg = entry.ToMessage() + event = entry.ToEvent() clients = (models.Client.all() .ancestor(client.parent_key())) for client in clients: - client.SendMessage(msg) + client.SendEvent(event) return {} @@ -93,7 +92,7 @@ def Subscribe(google_user, client, args): messages = args.get('messages', 0) return { - 'messages': models.Subscription.FindOrCreate(subject, client, messages), + 'events': models.Subscription.FindOrCreate(subject, client, messages), } @@ -117,7 +116,7 @@ class APIWrapper(webapp2.RequestHandler): ret = { 'status': 'ok', 'responses': [], - 'messages': [], + 'events': [], } for command in self.request_json['commands']: callback = self._COMMANDS[command['command']] @@ -125,9 +124,9 @@ class APIWrapper(webapp2.RequestHandler): self.verified_google_user, self.client, command.get('arguments', {})) - # Magic: if result contains "messages", haul them up a level so the + # Magic: if result contains "events", haul them up a level so the # client can see them as a single stream. - ret['messages'].extend(result.pop('messages', [])) + ret['events'].extend(result.pop('events', [])) ret['responses'].append(result) return ret diff --git a/lib/models.py b/lib/models.py index 36db2e3..7b79619 100644 --- a/lib/models.py +++ b/lib/models.py @@ -111,9 +111,9 @@ class StateEntry(db.Model): entry_value = db.StringProperty() public = db.BooleanProperty(required=True, default=False) - def ToMessage(self): + def ToEvent(self): return { - 'message_type': 'state', + 'event_type': 'state', 'key': self.entry_key, 'value': self.entry_value, 'last_set': self.last_set, @@ -146,10 +146,10 @@ class Subject(db.Model): obj = Message(parent=self, message=message) obj.put() - json_message = obj.ToMessage() + event = obj.ToEvent() for subscription in Subscription.all().ancestor(self): - Client.SendByKey(Subscription.client.get_value_for_datastore(subscription), json_message) + Client.SendByKey(Subscription.client.get_value_for_datastore(subscription), event) class Subscription(db.Model): @@ -170,7 +170,7 @@ class Subscription(db.Model): cls(parent=subject, client=client).put() if messages == 0: return [] - return [m.ToMessage() for m in subject.RecentMessages(messages)] + return [m.ToEvent() for m in subject.RecentMessages(messages)] class Message(db.Model): @@ -179,9 +179,9 @@ class Message(db.Model): created = db.DateTimeProperty(required=True, auto_now_add=True) message = db.TextProperty(required=True) - def ToMessage(self): + def ToEvent(self): return { - 'message_type': 'message', + 'event_type': 'message', 'subject': self.parent_key().name(), 'created': self.created, 'message': self.message, diff --git a/static/cosmopolite.js b/static/cosmopolite.js index 4deb88a..6c4056c 100644 --- a/static/cosmopolite.js +++ b/static/cosmopolite.js @@ -70,7 +70,7 @@ cosmopolite.Client.prototype.registerMessageHandlers_ = function() { 'Received message from bad origin:', e.originalEvent.origin); return; } - console.log('Received message:', e.originalEvent.data); + console.log('Received browser message:', e.originalEvent.data); this.onReceiveMessage_(e.originalEvent.data); }, this)); }; @@ -134,9 +134,9 @@ cosmopolite.Client.prototype.sendRPCs_ = function(commands, delay) { this.$.proxy(commands[i]['onSuccess'], this)(data.responses[i]); } } - // Handle messages that were immediately available as if they came over the + // Handle events that were immediately available as if they came over the // channel. - data['messages'].forEach(this.onServerMessage_, this); + data['events'].forEach(this.onServerEvent_, this); }) .fail(function(xhr) { var intDelay = @@ -218,24 +218,24 @@ cosmopolite.Client.prototype.onSocketClose_ = function() { }; cosmopolite.Client.prototype.onSocketMessage_ = function(msg) { - this.onServerMessage_(JSON.parse(msg.data)); + this.onServerEvent_(JSON.parse(msg.data)); }; -cosmopolite.Client.prototype.onServerMessage_ = function(msg) { - switch (msg.message_type) { +cosmopolite.Client.prototype.onServerEvent_ = function(e) { + switch (e.event_type) { case 'state': - var key = msg['key']; + var key = e['key']; if (this.stateCache_[key] && - this.stateCache_[key]['value'] == msg['value'] && - this.stateCache_[key]['last_set'] == msg['last_set'] && - this.stateCache_[key]['public'] == msg['public']) { - // Duplicate message. + this.stateCache_[key]['value'] == e['value'] && + this.stateCache_[key]['last_set'] == e['last_set'] && + this.stateCache_[key]['public'] == e['public']) { + // Duplicate event. break; } this.stateCache_[key] = { - 'value': msg['value'], - 'last_set': msg['last_set'], - 'public': msg['public'], + 'value': e['value'], + 'last_set': e['last_set'], + 'public': e['public'], } if ('onStateChange' in this.callbacks_) { this.callbacks_['onStateChange'](key, this.stateCache_[key]); @@ -244,8 +244,8 @@ cosmopolite.Client.prototype.onServerMessage_ = function(msg) { case 'login': if ('onLogin' in this.callbacks_) { this.callbacks_['onLogin']( - msg.google_user, - this.urlPrefix_ + '/auth/logout'); + e.google_user, + this.urlPrefix_ + '/auth/logout'); } break; case 'logout': @@ -256,7 +256,7 @@ cosmopolite.Client.prototype.onServerMessage_ = function(msg) { break; default: // Client out of date? Force refresh? - console.log('Unknown channel message:', msg); + console.log('Unknown channel event:', e); break; } };