Better method for tracking reconnect of polling clients.

This commit is contained in:
Ian Gulliver
2015-06-19 22:43:20 -07:00
parent 9a726558ca
commit 33f368910f
2 changed files with 7 additions and 4 deletions

2
api.py
View File

@@ -75,7 +75,7 @@ def Poll(google_user, client, client_address, instance_id, args):
return { return {
'result': 'ok', 'result': 'ok',
'new': instance.newly_created, 'instance_generation': instance.generation,
'events': events, 'events': events,
} }

View File

@@ -18,6 +18,7 @@ import hashlib
import logging import logging
import random import random
import struct import struct
import uuid
from google.appengine.api import channel from google.appengine.api import channel
from google.appengine.api import users from google.appengine.api import users
@@ -95,6 +96,7 @@ class Instance(db.Model):
active = db.BooleanProperty(required=True, default=False) active = db.BooleanProperty(required=True, default=False)
polling = db.BooleanProperty(required=True, default=False) polling = db.BooleanProperty(required=True, default=False)
last_poll = db.DateTimeProperty(required=True, auto_now=True) last_poll = db.DateTimeProperty(required=True, auto_now=True)
generation = db.StringProperty(required=True)
@classmethod @classmethod
def FromID(cls, instance_id): def FromID(cls, instance_id):
@@ -107,11 +109,12 @@ class Instance(db.Model):
def _FindOrCreate(): def _FindOrCreate():
entity = cls.get_by_key_name(instance_id) entity = cls.get_by_key_name(instance_id)
if entity: if entity:
entity.newly_created = False
return entity return entity
entity = cls(key_name=instance_id, **kwargs) entity = cls(
key_name=instance_id,
generation=str(uuid.uuid4()),
**kwargs)
entity.put() entity.put()
entity.newly_created = True
return entity return entity
return db.run_in_transaction(_FindOrCreate) return db.run_in_transaction(_FindOrCreate)