def primaryFirePress(self, data=None): dg = PyDatagram() self.addPrimaryPressData(dg) self.avatar.sendUpdate('primaryFirePress', [dg.getMessage()])
def makeSwapReadyDatagram(self): datagram = PyDatagram() datagram.addUint32(self.packetNumber) self.packetNumber = self.packetNumber + 1 datagram.addUint8(CLUSTER_SWAP_READY) return datagram
def sendAIHello(self): dg = PyDatagram() dg.addUint16(AI_HELLO_CMU) self.send(dg)
def send(self, text): self.datagram = PyDatagram() self.datagram.addString("chat") self.datagram.addString(text) self.client.cWriter.send(self.datagram, self.client.Connection)
def sendData(self, data, con): myPyDatagram = PyDatagram() myPyDatagram.addString(self.encode(data, self.compress)) self.cWriter.send(myPyDatagram, con)
def dg_goto_day(game): dg = PyDatagram() dg.addUint8(GOTO_DAY) dg.addUint8(game.day_count) dg.addUint8(game.red_room) return dg
def unsandboxClient(self, sender): dg = PyDatagram() dg.addServerHeader(sender, self.air.ourChannel, CLIENTAGENT_SET_STATE) dg.addUint16(2) # 2 = established self.air.send(dg)
def handleClientObjectUpdateField(self, datagram, dgi, targeted = False): """ Received an update request from a client. """ connection = datagram.getConnection() client = self.clientsByConnection[connection] if targeted: targetId = dgi.getUint32() doId = dgi.getUint32() fieldId = dgi.getUint16() doIdBase = self.getDoIdBase(doId) owner = self.clientsByDoIdBase.get(doIdBase) object = owner and owner.objectsByDoId.get(doId) if not object: self.notify.warning( "Ignoring update for unknown object %s from client %s" % ( doId, client.doIdBase)) return dcfield = object.dclass.getFieldByIndex(fieldId) if dcfield == None: self.notify.warning( "Ignoring update for field %s on object %s from client %s; no such field for class %s." % ( fieldId, doId, client.doIdBase, object.dclass.getName())) if client != owner: # This message was not sent by the object's owner. if not dcfield.hasKeyword('clsend') and not dcfield.hasKeyword('p2p'): self.notify.warning( "Ignoring update for %s.%s on object %s from client %s: not owner" % ( object.dclass.getName(), dcfield.getName(), doId, client.doIdBase)) return # We reformat the message slightly to insert the sender's # doIdBase. dg = PyDatagram() dg.addUint16(OBJECT_UPDATE_FIELD_CMU) dg.addUint32(client.doIdBase) dg.addUint32(doId) dg.addUint16(fieldId) dg.appendData(dgi.getRemainingBytes()) if targeted: # A targeted update: only to the indicated client. target = self.clientsByDoIdBase.get(targetId) if not target: self.notify.warning( "Ignoring targeted update to %s for %s.%s on object %s from client %s: target not known" % ( targetId, dclass.getName(), dcfield.getName(), doId, client.doIdBase)) return self.cw.send(dg, target.connection) self.needsFlush.add(target) elif dcfield.hasKeyword('p2p'): # p2p: to object owner only self.cw.send(dg, owner.connection) self.needsFlush.add(owner) elif dcfield.hasKeyword('broadcast'): # Broadcast: to everyone except orig sender self.sendToZoneExcept(object.zoneId, dg, [client]) elif dcfield.hasKeyword('reflect'): # Reflect: broadcast to everyone including orig sender self.sendToZoneExcept(object.zoneId, dg, []) else: self.notify.warning( "Message is not broadcast or p2p")
def dg_goto_night(game): dg = PyDatagram() dg.addUint8(GOTO_NIGHT) return dg
def reloadRelease(self, data=None): dg = PyDatagram() self.addReloadReleaseData(dg) self.avatar.sendUpdate('reloadRelease', [dg.getMessage()])
def rpc_kickChannel(self, channel, code, reason): datagram = PyDatagram() datagram.addServerHeader(channel, self.air.ourChannel, CLIENTAGENT_EJECT) datagram.addUint16(code) datagram.addString(reason) self.air.send(datagram)
def secondaryFireRelease(self, data=None): dg = PyDatagram() self.addSecondaryReleaseData(dg) self.avatar.sendUpdate('secondaryFireRelease', [dg.getMessage()])
def secondaryFirePress(self, data=None): dg = PyDatagram() self.addSecondaryPressData(dg) self.avatar.sendUpdate('secondaryFirePress', [dg.getMessage()])
def primaryFireRelease(self, data=None): dg = PyDatagram() self.addPrimaryReleaseData(dg) self.avatar.sendUpdate('primaryFireRelease', [dg.getMessage()])
def dg_update_vote_count(num): dg = PyDatagram() dg.addUint8(UPDATE_VOTE_COUNT) dg.addUint8(num) return dg
def dg_you_are_killer(): dg = PyDatagram() dg.addUint8(YOU_ARE_KILLER) return dg
def dg_start_game(game): dg = PyDatagram() dg.addUint8(START_GAME) return dg
def dg_kill_failed_empty_room(): dg = PyDatagram() dg.addUint8(KILL_FAILED_EMPTY_ROOM) return dg
def getBlob(self, store = 0): dg = PyDatagram() dg.addUint8(CatalogItemVersion) encodeCatalogItem(dg, self, store) return dg.getMessage()
def dg_deliver_pid(pid): dg = PyDatagram() dg.addUint8(DELIVER_PID) dg.addUint16(pid) return dg
def sendDeleteMsg(self, doId): datagram = PyDatagram() datagram.addUint16(CLIENT_OBJECT_DELETE) datagram.addUint32(doId) self.send(datagram)
def dg_how_many_in_room(num): dg = PyDatagram() dg.addUint8(NUM_IN_ROOM) dg.addUint8(num) return dg
def printNetString(self): string = self.makeNetString() dg = PyDatagram(string) dg.dumpHex(ostream)
def dg_deliver_game(game): dg = PyDatagram() dg.addUint8(DELIVER_GAME) dg.addUint16(game.gid) dg.addUint8(game.get_vote_count()) return dg
def makeSwapNowDatagram(self): datagram = PyDatagram() datagram.addUint32(self.packetNumber) self.packetNumber = self.packetNumber + 1 datagram.addUint8(CLUSTER_SWAP_NOW) return datagram
def dg_kick_from_game(reason): dg = PyDatagram() dg.addUint8(KICKED_FROM_GAME) dg.addUint8(reason) return dg
def makeExitDatagram(self): datagram = PyDatagram() datagram.addUint32(self.packetNumber) self.packetNumber = self.packetNumber + 1 datagram.addUint8(CLUSTER_EXIT) return datagram
def dg_kill_connection(): dg = PyDatagram() dg.addUint8(KILLED_CONNECTION) return dg
def sendLoginMsg(self): cr = self.cr tokenString = '' access = base.config.GetString('force-paid-status', '') if access == '': access = 'FULL' elif access == 'paid': access = 'FULL' elif access == 'unpaid': access = 'VELVET_ROPE' elif access == 'VELVET': access = 'VELVET_ROPE' else: self.notify.error( "don't know what to do with force-paid-status %s" % access) tokenString += 'TOONTOWN_ACCESS=%s&' % access tokenString += 'TOONTOWN_GAME_KEY=%s&' % self.loginName wlChatEnabled = 'YES' if base.config.GetString('otp-whitelist', 'YES') == 'NO': wlChatEnabled = 'NO' tokenString += 'WL_CHAT_ENABLED=%s &' % wlChatEnabled openChatEnabled = 'NO' if cr.openChatAllowed: openChatEnabled = 'YES' tokenString += 'OPEN_CHAT_ENABLED=%s&' % openChatEnabled createFriendsWithChat = 'NO' if cr.allowSecretChat: createFriendsWithChat = 'CODE' tokenString += 'CREATE_FRIENDS_WITH_CHAT=%s&' % createFriendsWithChat chatCodeCreationRule = 'No' if cr.allowSecretChat: if base.config.GetBool('secret-chat-needs-parent-password', 0): chatCodeCreationRule = 'PARENT' else: chatCodeCreationRule = 'YES' tokenString += 'CHAT_CODE_CREATION_RULE=%s&' % chatCodeCreationRule DISLID = config.GetInt('fake-DISL-PlayerAccountId', 0) if not DISLID: NameStringId = 'DISLID_%s' % self.loginName DISLID = config.GetInt(NameStringId, 0) tokenString += 'ACCOUNT_NUMBER=%d&' % DISLID tokenString += 'ACCOUNT_NAME=%s&' % self.loginName tokenString += 'GAME_USERNAME=%s&' % self.loginName tokenString += 'ACCOUNT_NAME_APPROVED=TRUE&' tokenString += 'FAMILY_NUMBER=&' tokenString += 'Deployment=US&' withParentAccount = base.config.GetBool('dev-with-parent-account', 0) if withParentAccount: tokenString += 'TOON_ACCOUNT_TYPE=WITH_PARENT_ACCOUNT&' else: tokenString += 'TOON_ACCOUNT_TYPE=NO_PARENT_ACCOUNT&' tokenString += 'valid=true' self.notify.info('tokenString=\n%s' % tokenString) datagram = PyDatagram() datagram.addUint16(CLIENT_LOGIN_TOONTOWN) playToken = tokenString datagram.addString(playToken) datagram.addString('dev') datagram.addUint32(cr.hashVal) datagram.addUint32(4) magicWords = base.config.GetString('want-magic-words', '') datagram.addString(magicWords) cr.send(datagram)
def sendBossSpawned(self): pkg = PyDatagram() pkg.addUint16(BOSS_SPAWNED) base.sr.sendDatagram(pkg)