diff options
author | Teddy <[email protected]> | 2013-08-30 10:08:29 +0800 |
---|---|---|
committer | Teddy <[email protected]> | 2013-08-30 10:08:29 +0800 |
commit | fca8b55ebc85ac447daeb241063622bf79fa0910 (patch) | |
tree | c38813d1a4d0ccbaa715252c86fc9759d2c13721 /server/piztor/server.py | |
parent | 35d91a285a22ade28638af7f7a26c2f47134ae1b (diff) |
ptp v2.0 and server on the road
Diffstat (limited to 'server/piztor/server.py')
-rw-r--r-- | server/piztor/server.py | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/server/piztor/server.py b/server/piztor/server.py index ed4e0b9..3bd1a2c 100644 --- a/server/piztor/server.py +++ b/server/piztor/server.py @@ -19,10 +19,7 @@ from model import * def get_hex(data): return "".join([hex(ord(c))[2:].zfill(2) for c in data]) -def get_sec_id(comp_id, sec_no): - return comp_id * 256 + sec_no - -db_path = "root:helloworld@localhost/piztor" +db_path = "root:helloworld@localhost/piztor2" #db_path = "piztor.sqlite" FORMAT = "%(asctime)-15s %(message)s" logging.basicConfig(format = FORMAT) @@ -292,10 +289,22 @@ class LocationUpdateHandler(RequestHandler): self.session.commit() pt = RequestHandler.push_tunnels - ulist = self.session.query(UserModel) \ - .filter(UserModel.sec_id == uauth.user.sec_id).all() - pdata = PushLocationData(uauth.uid, lat, lng) - for user in ulist: + u = uauth.user + comp = self.session.query(GroupInfo) \ + .filter(GroupInfo.id == u.comp_id).one() + sec = self.session.query(GroupInfo) \ + .filter(GroupInfo.id == u.sec_id).one() + + pdata = PushLocationData(u.id, lat, lng) + for user in comp.subscribers: + uid = user.id + if uid == uauth.uid: continue + if pt.has_key(uid): + tunnel = pt[uid] + tunnel.add(pdata) + tunnel.push() + + for user in sec.subscribers: uid = user.id if uid == uauth.uid: continue if pt.has_key(uid): @@ -327,13 +336,13 @@ class LocationInfoHandler(RequestHandler): username, tail = RequestHandler.trunc_padding(tr_data[32:]) if username is None: raise struct.error - comp_id, sec_no = struct.unpack("!BB", tail) + comp_no, sec_no = struct.unpack("!BB", tail) except struct.error: raise BadReqError("Location request: Malformed request body") logger.info("Trying to request locatin with " \ - "(token = {0}, comp_id = {1}, sec_no = {2})" \ - .format(get_hex(token), comp_id, sec_no)) + "(token = {0}, comp_no = {1}, sec_no = {2})" \ + .format(get_hex(token), comp_no, sec_no)) uauth = RequestHandler.get_uauth(token, username, self.session) # Auth failure @@ -343,13 +352,9 @@ class LocationInfoHandler(RequestHandler): _OptCode.location_info, _StatusCode.failure) - if sec_no == 0xff: # All members in the company - ulist = self.session.query(UserModel) \ - .filter(UserModel.comp_id == comp_id).all() - else: - sec_id = get_sec_id(comp_id, sec_no) - ulist = self.session.query(UserModel) \ - .filter(UserModel.sec_id == sec_id).all() + ulist = self.session.query(UserModel) \ + .filter(UserModel.sec_id == + UserModel.to_gid(comp_no, sec_no)).all() reply = struct.pack( "!LBB", self._response_size(len(ulist)), @@ -363,7 +368,7 @@ class LocationInfoHandler(RequestHandler): return reply def pack_gid(user): - return struct.pack("!BB", user.comp_id, user.sec_no) + return struct.pack("!H", user.sec_id) def pack_sex(user): return struct.pack("!B", 0x01 if user.sex else 0x00) @@ -557,9 +562,8 @@ class SendTextMessageHandler(RequestHandler): pt = RequestHandler.push_tunnels u = uauth.user - sec_id = get_sec_id(u.comp_id, u.sec_no) ulist = self.session.query(UserModel) \ - .filter(UserModel.sec_id == sec_id).all() + .filter(UserModel.sec_id == u.sec_id).all() for user in ulist: uid = user.id |