Ejemplo n.º 1
0
	def receiveResponse106(self,task):	
		while self.cReader.dataAvailable():
			datagram6 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram6):
				
				myIterator = PyDatagramIterator(datagram6)
                                print myIterator.getUint16()
				
                                msg = myIterator.getString()
                                
                                if msg is not None:
				    print "<-Server response:"
				    print msg
				    print myIterator.getUint32()
				    print myIterator.getUint32()
				    print myIterator.getUint32()
				    print myIterator.getUint32()
				    print myIterator.getUint32()
                                    raw_input("Press Enter to continue...")
                                    self.received = 1
				    # Attack
				    #raw_input("Press Enter to continue...") 
				    taskMgr.add(self.sendRequest108, 'health')
		return task.again				    
Ejemplo n.º 2
0
    def receiveResponse106(self, task):
        while self.cReader.dataAvailable():
            datagram6 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram6):

                myIterator = PyDatagramIterator(datagram6)
                print myIterator.getUint16()

                msg = myIterator.getString()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # Attack
                    #raw_input("Press Enter to continue...")
                    taskMgr.add(self.sendRequest108, 'health')
        return task.again
Ejemplo n.º 3
0
    def begin(self):
        if self.cReader.dataAvailable():
            datagram = NetDatagram()  # catch the incoming data in this instance
            # Check the return value; if we were threaded, someone else could have
            # snagged this data before we did
            if self.cReader.getData(datagram):
                myIterator = PyDatagramIterator(datagram)
                msgID = myIterator.getUint8()

                #If not in our protocol range then we just reject
                if msgID < 0 or msgID > 200:
                    return

                self.lastAck[datagram.getAddress()] = datetime.datetime.now()
                #TODO Switch to ip address and port

                #Order of these will need to be optimized later
                #We now pull out the rest of our headers
                remotePacketCount = myIterator.getUint8()
                ack = myIterator.getUint8()
                acks = myIterator.getUint16()
                hashID = myIterator.getUint16()

                if msgID == protocol.LOGIN:
                    username = myIterator.getString()
                    password = myIterator.getString()
                    if username not in accountEntities:
                        entity = sandbox.createEntity()
                        component = AccountComponent()
                        component.name = username
                        component.passwordHash = password
                        if not accountEntities:
                            component.owner = True
                        component.address = datagram.getAddress()
                        entity.addComponent(component)
                        accountEntities[username] = entity.id
                        log.info("New player " + username + " logged in.")
                        #
                        self.activePlayers.append(component)
                        self.activeConnections[component.address] = component
                        ackDatagram = protocol.loginAccepted(entity.id)
                        self.sendData(ackDatagram, datagram.getAddress())
                        #TODO: Send initial states?
                        messenger.send("newPlayerShip", [component, entity])
                    else:
                        component = sandbox.entities[accountEntities[username]].get_component(AccountComponent)
                        if component.passwordHash != password:
                            log.info("Player " + username + " has the wrong password.")
                        else:
                            component.connection = datagram.getConnection()
                            log.info("Player " + username + " logged in.")
Ejemplo n.º 4
0
    def handle_packet(self, dg):
        dgi = PyDatagramIterator(dg)
        msg = dgi.getUint16()
        self.logger.debug("received message - %d" % msg)

        # begin handling messages here
        if msg == msg_types.CONTROL_SET_CHANNEL:
            channel = dgi.getUint64()
            connection = dg.getConnection()
            self.register_channel(channel, connection)
        elif msg == msg_types.CONTROL_REMOVE_CHANNEL:
            channel = dgi.getUint16()
            self.unregister_channel(channel)
        else:
            self.logger.warn("received unimplemented message type - %d" % msg)
Ejemplo n.º 5
0
 def receiveResponse102(self, task):
     print "<-Server response:"
     while self.cReader.dataAvailable():
         datagram2 = NetDatagram()
         # Retrieve the contents of the datagram.
         if self.cReader.getData(datagram2):
             myIterator = PyDatagramIterator(datagram2)
             print myIterator.getUint16()
             msg = myIterator.getUint16()
             print msg, " received"
             if msg is not None:
                 raw_input("Press Enter to continue...")
                 self.received = 1
                 # Register
                 raw_input("Press Enter to continue...")
                 taskMgr.add(self.communicate301, 'Heartbeat')
Ejemplo n.º 6
0
	def receiveResponse102(self,task):
		print "<-Server response:"
		while self.cReader.dataAvailable():
			datagram2 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram2):
				myIterator = PyDatagramIterator(datagram2)
                                print myIterator.getUint16()
                                msg = myIterator.getUint16()
                                print msg, " received"
                                if msg is not None:
                                    raw_input("Press Enter to continue...")
                                    self.received = 1
                                     # Register
				    raw_input("Press Enter to continue...")
				    taskMgr.add(self.communicate301, 'Heartbeat')
Ejemplo n.º 7
0
	def receiveResponse112(self,task):
		
		while self.cReader.dataAvailable():
			datagram12 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram12):
				myIterator = PyDatagramIterator(datagram12)
                                print myIterator.getUint16()
                                msg = myIterator.getUint32()
                                
                                if msg is not None:
				    print "<-Server response:"
                                    print msg
				    print myIterator.getUint32()
				    raw_input("Press Enter to continue...")
                                    self.received = 1
Ejemplo n.º 8
0
 def check(self):
     while self.cReader.dataAvailable():
         print "data here"
         datagram = NetDatagram()
         # Retrieve the contents of the datagram.
         if self.cReader.getData(datagram):
             data = PyDatagramIterator(datagram)
             responseCode = data.getUint16()
             print responseCode
             if responseCode == 1:
                 self.getInt(data)
             elif responseCode == 2:
                 self.getString(data)
             elif responseCode == 3:
                 self.getShort(data)
             elif responseCode == 4:
                 self.getFloat(data)
             elif responseCode == 201:
                 self.getLogin(data)
             elif responseCode == 203:
                 self.getRegistion(data)
             elif responseCode == 204:
                 self.getCharacterCreation(data)
             elif responseCode == 205:
                 self.getChat(data)
             elif responseCode == 206:
                 self.getMove(data)
             else:
                 print "nothing found"
Ejemplo n.º 9
0
    def receiveResponse112(self, task):

        while self.cReader.dataAvailable():
            datagram12 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram12):
                myIterator = PyDatagramIterator(datagram12)
                print myIterator.getUint16()
                msg = myIterator.getUint32()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    raw_input("Press Enter to continue...")
                    self.received = 1
Ejemplo n.º 10
0
    def handle_datagram_reciever(self, datagram):
        di = PyDatagramIterator(datagram)
        reciever_channel = di.getUint64()
        sender_channel = di.getUint64()
        msg_type = di.getUint16()

        if msg_type == STATESERVER_OBJECT_GENERATE_WITH_REQUIRED:
            location = (di.getUint32(), di.getUint32())
            self.current_reciever = reciever_channel

            if location == (0, 0):
                print ("Tried to generate an object for an unknown location!")
                return

            self.do_interest_manager.handleGenerateWithRequired(self.current_reciever, location, di.getUint32())
        if msg_type == STATESERVER_OBJECT_GENERATE_WITH_REQUIRED_OTHER:
            doId = di.getUint32()
            location = (di.getUint32(), di.getUint32())
            self.current_reciever = reciever_channel

            if location == (0, 0):
                print ("Tried to generate an object for an unknown location!")
                return

            self.do_interest_manager.handleGenerateWithRequiredAndId(self.current_reciever, doId, location, di.getUint32())
        else:
            print ("Stateserver: Recieved a message that's unknown to the protocol, from %s" % str(sender_channel)) # debug error
            return
Ejemplo n.º 11
0
    def handle_datagram_reciever(self, datagram):
        di = PyDatagramIterator(datagram)
        reciever_channel = di.getUint64()
        sender_channel = di.getUint64()
        msg_type = di.getUint16()

        if msg_type == STATESERVER_OBJECT_GENERATE_WITH_REQUIRED:
            location = (di.getUint32(), di.getUint32())
            self.current_reciever = reciever_channel

            if location == (0, 0):
                print("Tried to generate an object for an unknown location!")
                return

            self.do_interest_manager.handleGenerateWithRequired(
                self.current_reciever, location, di.getUint32())
        if msg_type == STATESERVER_OBJECT_GENERATE_WITH_REQUIRED_OTHER:
            doId = di.getUint32()
            location = (di.getUint32(), di.getUint32())
            self.current_reciever = reciever_channel

            if location == (0, 0):
                print("Tried to generate an object for an unknown location!")
                return

            self.do_interest_manager.handleGenerateWithRequiredAndId(
                self.current_reciever, doId, location, di.getUint32())
        else:
            print(
                "Stateserver: Recieved a message that's unknown to the protocol, from %s"
                % str(sender_channel))  # debug error
            return
 def check(self):
     while self.cReader.dataAvailable():
         print "data here"
         datagram = NetDatagram()
         # Retrieve the contents of the datagram.
         if self.cReader.getData(datagram):
             data = PyDatagramIterator(datagram)
             responseCode = data.getUint16()
             print responseCode
             if responseCode == 1:
                 self.getInt(data)
             elif responseCode == 2:
                 self.getString(data)
             elif responseCode == 3:
                 self.getShort(data)
             elif responseCode == 4:
                 self.getFloat(data)
             elif responseCode == 201:
                 self.getLogin(data)
             elif responseCode == 203:
                 self.getRegistion(data)
             elif responseCode == 204:
                 self.getCharacterCreation(data)
             elif responseCode == 205:
                 self.getChat(data)
             elif responseCode == 206:
                 self.getMove(data)
             else:
                 print "nothing found"
Ejemplo n.º 13
0
    def makeFromNetString(self, netString):
        dataList = []
        dg = PyDatagram(netString)
        dgi = PyDatagramIterator(dg)
        for track in range(0, len(Tracks)):
            dataList.append(dgi.getUint16())

        return dataList
Ejemplo n.º 14
0
    def makeFromNetString(self, netString):
        dataList = []
        dg = PyDatagram(netString)
        dgi = PyDatagramIterator(dg)
        for track in xrange(0, len(Tracks)):
            dataList.append(dgi.getUint16())

        return dataList
Ejemplo n.º 15
0
    def handleDatagram(self, datagram):
        connection = datagram.getConnection()

        di = PyDatagramIterator(datagram)
        message_type = di.getUint16()

        if message_type == CLIENT_AGENT_SET_INTEREST:
            self.handleClientAgentSetInterest(
                di,
                sender=di.getUint64(),
                handle=di.getUint16(),
                contextId=di.getUint32(),
                parentId=di.getUint32(),
                zoneId=di.getUint32(),
            )
        elif message_type == CLIENT_AGENT_REMOVE_INTEREST:
            self.handleRemoveInterest(di, sender=di.getUint64(), handle=di.getUint16(), contextId=di.getUint32())
Ejemplo n.º 16
0
 def makeFromNetString(self, netString):
     """makeFromNetString(self)
     Make an experience from a network packet
     """
     dataList = []
     dg = PyDatagram(netString)
     dgi = PyDatagramIterator(dg)
     for track in range(0, len(Tracks)):
         dataList.append(dgi.getUint16())
     return dataList
Ejemplo n.º 17
0
    def handleDatagram(self, datagram):
        connection = datagram.getConnection()
        dgi = PyDatagramIterator(datagram)
        message_type = dgi.getUint16()
        print message_type

        if message_type == CLIENT_HEARTBEAT:
        	self.handleClientHeartbeat(dgi, connection)
        elif message_type == CLIENT_DISCONNECT:
        	self.handleClientDisconnect(dgi, connection)
Ejemplo n.º 18
0
    def handle_datagram_reciever(self, datagram):
        connection = datagram.getConnection()
        if not connection:
            print("Got an unexpected connection: %s" % str(connection))
            return

        di = PyDatagramIterator(datagram)
        reciever_channel = di.getUint64()
        sender_channel = di.getUint64()
        msg_type = di.getUint16()
        print msg_type
Ejemplo n.º 19
0
 def handle_datagram_reciever(self, datagram):
     connection = datagram.getConnection()
     if not connection:
         print ("Got an unexpected connection: %s" % str(connection))
         return
     
     di = PyDatagramIterator(datagram)
     reciever_channel = di.getUint64()
     sender_channel = di.getUint64()
     msg_type = di.getUint16()
     print msg_type
Ejemplo n.º 20
0
    def sendUpdateToChannel(self, distObj, channelId, fieldName, args):
        """ Sends a targeted update of a single field to a particular
        client.  The top 32 bits of channelId is ignored; the lower 32
        bits should be the client Id of the recipient (i.e. the
        client's doIdbase).  The field update will be sent to the
        indicated client only.  The field must be marked clsend or
        p2p, and may not be marked broadcast. """

        datagram = distObj.dclass.clientFormatUpdate(fieldName, distObj.doId,
                                                     args)
        dgi = PyDatagramIterator(datagram)

        # Reformat the packed datagram to change the message type and
        # add the target id.
        dgi.getUint16()

        dg = PyDatagram()
        dg.addUint16(CLIENT_OBJECT_UPDATE_FIELD_TARGETED_CMU)
        dg.addUint32(channelId & 0xffffffff)
        dg.appendData(dgi.getRemainingBytes())

        self.send(dg)
Ejemplo n.º 21
0
 def nonBlockingRead(self, qcr):
     if self.cReader.dataAvailable():
         datagram = NetDatagram()
         if self.cReader.getData(datagram):
             data = PyDatagramIterator(datagram)
             msgID = data.getUint16()
         else:
             data = None
             msgID = MSG_NONE
     else:
         datagram = None
         data = None
         msgID = MSG_NONE
     return (datagram, data, msgID)
Ejemplo n.º 22
0
	def handleDatagram(self, datagram):
		connection = datagram.getConnection()
		if not connection:
			return

		di = PyDatagramIterator(datagram)
		message_type = di.getUint16()

		if message_type == CONTROL_SET_CHANNEL:
			self.registerChannel(di.getUint64(), connection)
		elif message_type == CONTROL_REMOVE_CHANNEL:
			self.unregisterChannel(di.getUint64())
		elif message_type == CONTROL_MESSAGE:
			self.routeMessage(di.getUint64(), di.getDatagram())
Ejemplo n.º 23
0
 def nonBlockingRead(self, qcr): 
     if self.cReader.dataAvailable(): 
         datagram = NetDatagram() 
         if self.cReader.getData(datagram): 
             data = PyDatagramIterator(datagram) 
             msgID = data.getUint16() 
         else: 
             data = None 
             msgID = MSG_NONE 
     else: 
         datagram = None 
         data = None 
         msgID = MSG_NONE 
     return (datagram, data, msgID)
Ejemplo n.º 24
0
    def handle_packet(self, dg):
        connection = dg.getConnection()
        dgi = PyDatagramIterator(dg)
        msg = dgi.getUint16()

        # begin handling messages here
        if msg == msg_types.CLIENT_HEARTBEAT:
            self.handle_client_heartbeat(dgi)
        elif msg == msg_types.CLIENT_LOGIN_2:
            self.handle_client_login(dgi, connection)
        elif msg == msg_types.CLIENT_DISCONNECT:
            self.handle_client_disconnect(dgi, connection)
        else:
            self.logger.warn("received unimplemented message type - %d" % msg)
Ejemplo n.º 25
0
    def begin(self):
        if self.cReader.dataAvailable():
            datagram = NetDatagram()  # catch the incoming data in this instance
            # Check the return value; if we were threaded, someone else could have
            # snagged this data before we did
            if self.cReader.getData(datagram):
                myIterator = PyDatagramIterator(datagram)
                msgID = myIterator.getUint8()

                #If not in our protocol range then we just reject
                if msgID < 0 or msgID > 200:
                    return

                #Order of these will need to be optimized later
                #We now pull out the rest of our headers
                remotePacketCount = myIterator.getUint8()
                ack = myIterator.getUint8()
                acks = myIterator.getUint16()
                hashID = myIterator.getUint16()
                sourceOfMessage = datagram.getConnection()

                if msgID == protocol.NEW_SHIP:
                    log.info("New ship")
                    playerPilotID = myIterator.getUint16()
                    shipID = myIterator.getUint16()
                    shipName = myIterator.getString()
                    health = myIterator.getUint8()
                    position = Point3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32())
                    linearVelocity = Vec3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32())
                    rotiation = VBase3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32())
                    angularVelocity = Vec3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32())
                    ship = sandbox.addEntity(shipID)
                    component = ships.PilotComponent()
                    component.accountEntityID = playerPilotID
                    ship.addComponent(component)
                    component = ships.BulletPhysicsComponent()
                    messenger.send("addSpaceShip", [component, shipName, position, linearVelocity])
                    ship.addComponent(component)
                    component = ships.ThrustComponent()
                    ship.addComponent(component)
                    component = ships.InfoComponent()
                    component.health = health
                    component.name = shipName
                    ship.addComponent(component)
                elif msgID == protocol.PLAYER_MOVED_SHIP:
                    log.debug("Player moved ship")
                    accountID = myIterator.getUint16()
                    shipID = myIterator.getUint16()
                    print sandbox.components[shipID]
                    universals.shipNode = sandbox.components[shipID][ships.BulletPhysicsComponent].nodePath
                elif msgID == protocol.LOGIN_ACCEPTED:
                    log.info("Login accepted")
                    entityID = myIterator.getUint8()
                    universals.day = myIterator.getFloat32()
                elif msgID == protocol.LOGIN_DENIED:
                    log.info("Login failed")
Ejemplo n.º 26
0
 def handle_datagram(self, datagram):
     self.connection = datagram.getConnection()
     if not self.connection:
         pass # TODO!
     
     di = PyDatagramIterator(datagram)
     msg_type = di.getUint16()
     print msg_type # debug
     
     if msg_type == CLIENT_HEARTBEAT:
         self.handle_client_heartbeat(self.connection, di)
     elif msg_type == CLIENT_DISCONNECT:
         self.remove_connection_instance(self.connection)
     else:
         print ("Recieved an unexpected datagram: %s from: %s" % (msg_type, str(self.connection)))
    def updateRoutine(self, task):
        """A once-per-frame task used to read packets from the socket."""
        while self.cReader.dataAvailable():
            # Create a datagram to store all necessary data.
            datagram = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram):
                # Prepare the datagram to be iterated.
                data = PyDatagramIterator(datagram)
                # Retrieve a "short" that contains the response code.
                responseCode = data.getUint16()
                # Pass into another method to execute the response.
                if responseCode != Constants.MSG_NONE:
                    self.handleResponse(responseCode, data)

        return task.cont
Ejemplo n.º 28
0
    def updateRoutine(self, task):
        """A once-per-frame task used to read packets from the socket."""
        while self.cReader.dataAvailable():
            # Create a datagram to store all necessary data.
            datagram = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram):
                # Prepare the datagram to be iterated.
                data = PyDatagramIterator(datagram)
                # Retrieve a "short" that contains the response code.
                responseCode = data.getUint16()
                # Pass into another method to execute the response.
                if responseCode != Constants.MSG_NONE:
                    self.handleResponse(responseCode, data)

        return task.cont
Ejemplo n.º 29
0
 def server_processing(self,datagram):
     data_iter = PyDatagramIterator(datagram)
     msgID = data_iter.getUint16()
     if msgID == PRINT_MESSAGE:
         messageToPrint = data_iter.getString()
         print messageToPrint
     if msgID == ARMY_MOVE_REQUEST:
         army_id = data_iter.getInt16()
         ax = data_iter.getFloat64()
         ay = data_iter.getFloat64()
         tx = data_iter.getFloat64()
         ty = data_iter.getFloat64()
         base.armies[army_id].set_target(False,tx,ty)
     if msgID == CLIENT_CHAT:
         r = data_iter.getInt32()
         g = data_iter.getInt32()
         b = data_iter.getInt32()
         text = data_iter.getString()
         self.server_messager("chat_send",[(r,g,b),text])
         #base.main_menu.chat_add((r,g,b,1),text)
     if msgID == CLIENT_READY:
         but_id = data_iter.getInt32()
         state = data_iter.getInt32()
         self.server_messager("ready_button",[but_id,state])
         #base.main_menu.chat_add((r,g,b,1),text)
     if msgID == CLIENT_LOADED:
         self.server_messager("all_loaded",[])
         base.menu_manager.menus["mp-load"].load_complete()
     if msgID == CLIENT_INIT_REQUEST:
         pn = data_iter.getString()
         pk = data_iter.getString()
         base.menu_manager.menus["mp-game"].obj_list[6]["text"] = pn
         base.menu_manager.menus["mp-game"].obj_list[7]["text"] = pk
         self.server_messager("client_update",[base.menu_manager.menus["mp-game"].obj_list[4]["text"],
                                              base.menu_manager.menus["mp-game"].obj_list[5]["text"],
                                              base.menu_manager.menus["mp-game"].obj_list[8]["indicatorValue"],
                                              base.menu_manager.menus["mp-game"].map_selected])
     if msgID == BUILD_START_REQUEST:
         t_id = data_iter.getInt32()
         player = data_iter.getInt32()
         type = data_iter.getString()
         base.towers[t_id].build_start()
     if msgID == BUILD_CANCEL_REQUEST:
         t_id = data_iter.getInt32()
         player = data_iter.getInt32()
         type = data_iter.getString()
         base.towers[t_id].build_cancel()
Ejemplo n.º 30
0
    def handle_datagram(self, datagram):
        self.connection = datagram.getConnection()
        if not self.connection:
            pass  # TODO!

        di = PyDatagramIterator(datagram)
        msg_type = di.getUint16()
        print "Got Tewtow msgType: %s" % (msg_type)  # debug

        if msg_type == CLIENT_HEARTBEAT:
            print "Server recieved Heartbeat."
            self.handle_client_heartbeat(self.connection, di)
        elif msg_type == CLIENT_DISCONNECT:
            print "A Tewtow User  Logged Off the Server: %s" % (
                self.connection)
            self.remove_connection_instance(self.connection)
        elif msg_type == CLIENT_LOGIN_2:
            ## Client is asking for login... handle it.
            ##TODO: This should be validated from server.
            print "A Tewtow User Logged Onto the Server.: %s" % (
                self.connection)
            self.handle_client_login(self.connection, di)
        elif msg_type == CLIENT_GET_SHARD_LIST:
            ## Client is asking for our districts.. handle it.
            self.handle_get_shard_list(self.connection, di)
        elif msg_type == CLIENT_GET_AVATARS:
            ## Client is asking for his avatars.. handle it.
            print "Getting %s Tews.." % (self.connection)
            self.handle_get_avatars(self.connection, di)
        elif msg_type == CLIENT_SET_AVATAR:
            ## Client is asking for AVATAR info, handle it.
            print "%s Picked A Tew.. Setting Stuff Up." % (self.connection)
            self.handle_set_avatar(self.connection, di)

        elif msg_type == CLIENT_CREATE_AVATAR:
            print "Someone Created a Tew!"
            self.CLIENT_CREATE_AVATAR(self.connection, di)

        elif msg_type == CLIENT_SET_NAME_PATTERN:
            print "Someone Did a name for a Tew!"
            self.CLIENT_SET_NAME_PATTERN(self.connection, di)

        else:
            print("Oh Shit! Recieved an unexpected Datagram: %s from: %s" %
                  (msg_type, str(self.connection)))
Ejemplo n.º 31
0
	def __readTask(self, Task):
		''' This task listens for any messages coming in over any connections.
			If we get a connection passes it to the datagram handler.'''
		if self._cReader.dataAvailable():
			datagram=NetDatagram()
			if self._cReader.getData(datagram):
				data = PyDatagramIterator(datagram)
				msgID = data.getUint16()
			else:
				data = None
				msgID = MSG_NONE
		else:
			datagram = None
			data = None
			msgID = MSG_NONE
		if msgID is not MSG_NONE:
			self.__handleDatagram(data, msgID, datagram.getConnection())
		return Task.cont
 def check(self):
     while self.cReader.dataAvailable():
         datagram = NetDatagram()
         # Retrieve the contents of the datagram.
         if self.cReader.getData(datagram):
             data = PyDatagramIterator(datagram)
             responseCode = data.getUint16()
             if responseCode == self.CODE_INT:
                 self.getInt(data)
             elif responseCode == self.CODE_STRING:
                 self.getString(data)
             elif responseCode == self.CODE_SHORT:
                 self.getShort(data)
             elif responseCode == self.CODE_FLOAT:
                 self.getFloat(data)
             else:
                 for recvAction in self.recvActions:
                     if(responseCode == recvAction[0]):
                         recvAction[1](data)
Ejemplo n.º 33
0
 def nonBlockingRead(self, qcr):
     """
     Return a datagram iterator and type if data is available on the
     queued connection reader
     """
     if self.cReader.dataAvailable():
         datagram = NetDatagram()
         if self.cReader.getData(datagram):
             data = PyDatagramIterator(datagram)
             msgID = data.getUint16()
         else:
             data = None
             msgID = MSG_NONE
     else:
         datagram = None
         data = None
         msgID = MSG_NONE
     # Note, return datagram to keep a handle on the data
     return (datagram, data, msgID)
Ejemplo n.º 34
0
 def nonBlockingRead(self,qcr): 
     """ 
     Return a datagram iterator and type if data is available on the 
     queued connection reader 
     """ 
     if self.cReader.dataAvailable(): 
         datagram = NetDatagram() 
         if self.cReader.getData(datagram): 
             data = PyDatagramIterator(datagram) 
             msgID = data.getUint16() 
         else: 
             data = None 
             msgID = MSG_NONE 
     else: 
         datagram = None 
         data = None 
         msgID = MSG_NONE 
     # Note, return datagram to keep a handle on the data 
     return (datagram, data, msgID) 
Ejemplo n.º 35
0
	def handleMessage(self, datagram):
		# Who sent us the message?
		connection = datagram.getConnection()

		dgi = PyDatagramIterator(datagram)
		messageType = dgi.getUint16()

		if messageType == CLIENT_HEARTBEAT:
			self.handleClientHeartbeat(dgi, connection)
		elif messageType == CLIENT_DISCONNECT:
			self.handleClientDisconnected(dgi, connection)
		elif messageType == CLIENT_LOGIN_3:
			self.handleClientLogin(dgi, connection)
		elif messageType == CLIENT_ADD_INTEREST:
			self.handleAddInterest(dgi, connection)
		elif messageType == CLIENT_OBJECT_UPDATE_FIELD:
			self.handleUpdateObjectField(dgi, connection)
		else:
			self._unimplementedType(messageType)
Ejemplo n.º 36
0
    def __gotOwnerAv(self, db, retcode):
        assert (self.notify.debug(
            "__gotOwnerAv(%s, %s): %s" %
            (list(db.values.keys()), retcode, self.doId)))
        if retcode != 0:
            self.notify.warning("Avatar %s for house %s does not exist!" %
                                (self.ownerId, self.doId))
            return

        # The avatar still exists, so check its properties.
        onOrder = None
        mailboxContents = None
        awardMailboxContents = None

        dg = db.values.get('setDeliverySchedule')
        if dg:
            di = PyDatagramIterator(dg)
            blob = di.getString()
            onOrder = CatalogItemList.CatalogItemList(
                blob,
                store=CatalogItem.Customization | CatalogItem.DeliveryDate)

        dg = db.values.get('setMailboxContents')
        if dg:
            di = PyDatagramIterator(dg)
            blob = di.getString()
            mailboxContents = CatalogItemList.CatalogItemList(
                blob, store=CatalogItem.Customization)

        dg = db.values.get('setMaxHp')
        if dg:
            di = PyDatagramIterator(dg)
            hp = di.getUint16()

        dg = db.values.get('setAwardMailboxContents')
        if dg:
            di = PyDatagramIterator(dg)
            blob = di.getString()
            awardMailboxContents = CatalogItemList.CatalogItemList(
                blob, store=CatalogItem.Customization)

        #self.b_setCannonEnabled(1)
        self.__checkMailbox(onOrder, mailboxContents, 0, awardMailboxContents)
Ejemplo n.º 37
0
	def handle_datagram(self, datagram):
		self.connection = datagram.getConnection()
		if not self.connection:
			self.boot_invalid_connection()

		di = PyDatagramIterator(datagram)
		msg_type = di.getUint16()

		if msg_type == REQUEST_FOR_LOGIN:
			self.database_mgr.handle_login_request(self, self.connection, account_name=di.getString(), account_password=di.getString())
		elif msg_type == REQUEST_FOR_REGISTER:
			self.database_mgr.handle_create_account_request(self, self.connection, di.getString(), di.getString())
		elif msg_type == REQUEST_FOR_PASSWORD_CHANGE:
			return NotImplemented
		elif msg_type == REQUEST_FOR_ACCOUNT_DELETE:
			return NotImplemented
		else:
			print ("Database: Recieved an unknown protocol request: %d from %s" % (msg_type, str(self.connection)))
			return
Ejemplo n.º 38
0
	def handleDatagram(self, datagram):
		connection = datagram.getConnection()

		di = PyDatagramIterator(datagram)
		message_type = di.getUint16()
		print message_type # Debug

		if message_type == CLIENT_HEARTBEAT:
			self.handleClientHeartbeat(di, connection)
		elif message_type == CLIENT_DISCONNECT:
			self.handleClientDisconnected(di, connection)
		elif message_type == CLIENT_ADD_INTEREST:
			self.handleClientAddInterest(di, connection)
		elif message_type == CLIENT_REMOVE_INTEREST:
			self.handleClientRemoveInterest(di, connection)
		elif message_type == STATESERVER_BOUNCE_MESSAGE:
			self.handleStateServerBounceMessage(di, connection)
		else:
			return
Ejemplo n.º 39
0
	def __readTask(self, taskdata):
		''' This task listens for any messages coming in over any connections.
			If we get a connection passes it to the datagram handler.'''
		if self._cReader.dataAvailable():
			datagram=NetDatagram()  # catch the incoming data in this instance
			# Check the return value; if we were threaded, someone else could have
			# snagged this data before we did
			if self._cReader.getData(datagram):
				data = PyDatagramIterator(datagram)
				msgID = data.getUint16()
			else:
				data = None
				msgID = MSG_NONE
		else:
			datagram = None
			data = None
			msgID = MSG_NONE
		if msgID is not MSG_NONE:
			self.__handleDatagram(data, msgID, datagram.getConnection())
		return Task.cont
Ejemplo n.º 40
0
    def udpNonBlockingRead(self, qcr):
        """
        Return a datagram collection and type if data is available on
        the queued connection udpReader
        """
        if self.udpReader.dataAvailable():
            datagram = NetDatagram()
            if self.udpReader.getData(datagram):
                data = PyDatagramIterator(datagram)
                opcode = data.getUint16()
            else:
                data = None
                opcode = MSG_NONE
        else:
            datagram = None
            data = None
            opcode = MSG_NONE

        # Return the datagram to keep a handle on the data
        return (datagram, data, opcode)
Ejemplo n.º 41
0
 def udpNonBlockingRead(self, qcr):
     """
     Return a datagram collection and type if data is available on
     the queued connection udpReader.
     """
     if self.udpReader.dataAvailable():
         datagram = NetDatagram()
         if self.udpReader.getData(datagram):
             data = PyDatagramIterator(datagram)
             opcode = data.getUint16()
         else:
             data = None
             opcode = MSG_NONE
     else:
         datagram = None
         data = None
         opcode = MSG_NONE
         
     # Return the datagram to keep a handle on the data
     return (datagram, data, opcode)
Ejemplo n.º 42
0
    def tcpNonBlockingRead(self, qcr):
        """
        Return a datagram collection and type if data is available on 
        the queued tcp connection reader.
        
        @param qcr: self.tcpReader
        """
        if self.tcpReader.dataAvailable():
            datagram = NetDatagram()
            if self.tcpReader.getData(datagram):
                data = PyDatagramIterator(datagram)
                opcode = data.getUint16()
            else:
                data = None
                opcode = MSG_NONE
        else:
            datagram = None
            data = None
            opcode = MSG_NONE

        return (datagram, data, opcode)
Ejemplo n.º 43
0
	def check(self):
		while self.cReader.dataAvailable():
			print "data here"
			datagram = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram):
				data = PyDatagramIterator(datagram)
				responseCode = data.getUint16()
				print responseCode
				if responseCode == 201:
					self.getPlayer(data)
				elif responseCode == 202:
					self.register(data)
				elif responseCode == 203:
					self.getOpponent(data)
				elif responseCode == 214:
					self.movePlayer(data)
				elif responseCode == 219:
					self.dropPlayer(data)
				else:
					print "nothing found"
Ejemplo n.º 44
0
    def receiveResponse301(self):

        while self.cReader.dataAvailable():
            datagram301 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram301):
                myIterator = PyDatagramIterator(datagram301)
                p = myIterator.getUint16()
                if p == 213:
                    un = myIterator.getString()
                    cname = myIterator.getString()
                    ctype = myIterator.getUint32()
                    cteam = myIterator.getUint32()
                    if un == MyApp.uname:
                        abc = 'abc'
                    else:
                        print cname + ' just joined a game......!! hurray'

                    #print msg, " received"

                    self.received = 1
Ejemplo n.º 45
0
	def receiveResponse301(self):
		
		while self.cReader.dataAvailable():
			datagram301 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram301):
				myIterator = PyDatagramIterator(datagram301)
                                p =  myIterator.getUint16()
                                if p == 213:
					un = myIterator.getString()
					cname = myIterator.getString()
					ctype = myIterator.getUint32()
					cteam = myIterator.getUint32()	
					if un ==  MyApp.uname:
						abc = 'abc'
					else:	
						print cname+' just joined a game......!! hurray'
				
					#print msg, " received"
					
					self.received = 1
Ejemplo n.º 46
0
 def tcpNonBlockingRead(self, qcr):
     """
     Return a datagram collection and type if data is available on 
     the queued tcp connection reader.
     
     @param qcr: self.tcpReader
     """
     if self.tcpReader.dataAvailable():
         datagram = NetDatagram()
         if self.tcpReader.getData(datagram):
             data = PyDatagramIterator(datagram)
             opcode = data.getUint16()
         else:
             data = None
             opcode = MSG_NONE
     else:
         datagram = None
         data = None
         opcode = MSG_NONE
         
     return (datagram, data, opcode)
Ejemplo n.º 47
0
 def check(self):
     while self.cReader.dataAvailable():
         print "data here"
         datagram = NetDatagram()
         # Retrieve the contents of the datagram.
         if self.cReader.getData(datagram):
             data = PyDatagramIterator(datagram)
             responseCode = data.getUint16()
             print responseCode
             if responseCode == 201:
                 self.getPlayer(data)
             elif responseCode == 202:
                 self.register(data)
             elif responseCode == 203:
                 self.getOpponent(data)
             elif responseCode == 214:
                 self.movePlayer(data)
             elif responseCode == 219:
                 self.dropPlayer(data)
             else:
                 print "nothing found"
Ejemplo n.º 48
0
	def check(self):
		while self.cReader.dataAvailable():
			
			datagram = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram):
				data = PyDatagramIterator(datagram)
				responseCode = data.getUint16()
				
				if responseCode == 212:
					print self.getString(data)
					self.options()
				elif responseCode == 201: #login code
					if (self.getString(data)=="Unsuccessful login"): #appears if login unsuccessful
                                                print " "
                                                print "Unsuccessful login"
                                                print " "
                                                self.options()
                                        else:
                                                print "Your are logged in" #appear if login successful
                                                self.login_options()#appears the login options
				elif responseCode == 203: #register code
					if (self.getString(data)=="Registration successful"): #appear if registration was successful
                                                print "You are now registered"
                                                print "Please login" #user must login
                                                print " "
                                                self.options() 
                                        else:
                                                print " "#appear if registration wasn't successful
                                                print "Registration was unsuccessful. Pick a different username and please try again "
                                                print " "
                                                self.options()#user must attempt to register again
				elif responseCode == 215:
					print self.getString(data)
					self.messages()
				elif responseCode == 216:
					print self.getString(data)
					self.messages()
				else:
					print "nothing found"
Ejemplo n.º 49
0
def myProcessDataFunction(datagram):
    global status, P1NAME, P2NAME, lastResetRequest
    global MY_POSITION, kicker, texKicker, texKicker2, mode

    if (role == ROLE_SERVER):
        sender = activeConnections.index(datagram.getConnection())
    data = PyDatagramIterator(datagram)
    #try:
    if True:  #just to keep the indent, in case we need "try" again.
        pktType = data.getUint16()
        if role == ROLE_SERVER:  # packets received only by server
            if pktType == PACKET_MOVE:
                setOpponentMove(data, sender + 1)
            elif pktType == PACKET_MSG:
                timer = data.getUint16()
                msg = data.getString()
                sendMessage(msg, timer)  #broadcast to all
            elif pktType == PACKET_HELLO:
                magic = data.getString()
                proto = data.getUint16()
                soft = data.getString()
                if magic != MAGIC_WORD:
                    print "Connecting party did not identify as netkickern client."
                    sys.exit(1)
                if proto != PROTOCOL_VERSION:
                    print "Connecting party used incompatible protocol version " + str(
                        proto) + "."
                    print "We are using " + str(PROTOCOL_VERSION) + "."
                    sys.exit(1)
                if soft != SOFTWARE_VERSION:
                    print "WARNING: Client is using software " + soft + "."
                print "Ok, client " + str(sender + 1) + " connected."
                status = STATUS_INIT
                qpref = PyDatagram()  #query for client preferences
                qpref.addUint16(PACKET_QPREF)
                qpref.addString(SOFTWARE_VERSION)
                cWriter.send(qpref, activeConnections[sender])
            elif pktType == PACKET_PREF:
                if status != STATUS_INIT:
                    return
                prefs = {}
                teamname = data.getString()
                prefs['team'] = teamname
                place = -1
                if (mode == MODE_4P):
                    #assign the last free position, and P1 only if the teamname matches or everything else is given away
                    if not POSITION[3]:
                        place = 3
                    if not POSITION[2]:
                        place = 2
                    if (teamname == TEAMNAME) or (place == -1):
                        if not POSITION[1]:
                            place = 1
                    print "placed player ", sender + 1, " at position ", place
                    POSITION[place] = sender + 1
                    prefs['pos'] = place
                playerPrefs[sender] = prefs
                if (mode == MODE_2P) or (0 in playerPrefs and 1 in playerPrefs
                                         and 2 in playerPrefs):
                    P1NAME = TEAMNAME
                    P2NAME = playerPrefs[0]['team']
                    rename = PyDatagram()
                    rename.addUint16(PACKET_NAME)
                    rename.addString(P1NAME)
                    rename.addString(P2NAME)
                    toAll(rename, activeConnections)
                    if (mode == MODE_4P
                        ):  #inform players of the position they play in
                        for i in range(0, 3):
                            placing = PyDatagram()
                            placing.addUint16(PACKET_PLACE)
                            placing.addUint16(playerPrefs[i]['pos'])
                            cWriter.send(placing, activeConnections[i])
                    resetNames()
                    welcome = PyDatagram()
                    welcome.addUint16(PACKET_START)
                    toAll(welcome, activeConnections)
                    startGame()
            elif pktType == PACKET_PONG:
                stime = data.getFloat64()
                now = time.time()
                deltatime = now - stime  # TODO: use this to delay mouse movements by avg(deltatime)/2
                print "player " + str(sender) + " network delay: " + str(
                    deltatime * 500) + "ms "  #rtt/2
            elif pktType == PACKET_RESET:
                lastResetRequest = time.time()
                playerPrefs[sender]['lastReset'] = lastResetRequest
                if not isResetConfirmed():
                    resetRequest = PyDatagram()  #forward to all clients
                    resetRequest.addUint16(PACKET_RESET)
                    #resetRequest.addUint16(sender) # TODO: tell everyone which player sent the request
                    toAll(resetRequest, activeConnections)
                    setMessage(
                        "Player " + str(sender + 1) +
                        " wishes to reset the ball.\nPress Space to confirm.",
                        3)
        else:  # packets received only by clients
            if pktType == PACKET_SET:
                setGameStatus(data)
            elif pktType == PACKET_SCORE:
                setScore(data)
            elif pktType == PACKET_QPREF:
                soft = data.getString()
                if soft != SOFTWARE_VERSION:
                    print "WARNING: Server is using software " + soft + "."
                status = STATUS_INIT
                pref = PyDatagram()
                pref.addUint16(PACKET_PREF)
                pref.addString(TEAMNAME)
                cWriter.send(pref, serverConnection)
            elif pktType == PACKET_START:
                print "connection to game host confirmed."
                startGame()
            elif pktType == PACKET_MSG:
                timer = data.getUint16()
                msg = data.getString()
                setMessage(msg, timer)
            elif pktType == PACKET_NAME:
                P1NAME = data.getString()
                P2NAME = data.getString()
                resetNames()
            elif pktType == PACKET_PLACE:  #4P only
                MY_POSITION = data.getUint16()
                mode = MODE_4P
                resetGameColours(kicker, texKicker, texKicker2)
            elif pktType == PACKET_PING:
                stime = data.getFloat64()
                pong = PyDatagram()
                pong.addUint16(PACKET_PONG)
                pong.addFloat64(stime)
                cWriter.send(pong, serverConnection)
            elif pktType == PACKET_RESET:
                setMessage(
                    "Another wishes to reset the ball.\nPress Space to confirm.",
                    3)
    #except Exception, e:
    #  print e
    #  sys.exit(1) #wow, this is what I call exception handling..
    return
Ejemplo n.º 50
0
    def handleDatagram(self, dg):
        if not dg.getLength() > 0:
            return None
        dgi = PyDatagramIterator(dg)
        connection = dg.getConnection()
        msgType = dgi.getUint16()
        if msgType == CLIENT_HEARTBEAT:
            self.notify.debug('Recieved heartbeat.')
        elif msgType == CLIENT_DISCONNECT:
            if connection in self.connectionList:
                self.connectionList.remove(connection)
        elif msgType == CLIENT_SET_ZONE:
            self.handleSetZone(dgi, connection)
        elif msgType == CLIENT_REMOVE_ZONE:
            self.handleRemoveZone(dgi, connection)
        elif msgType == CLIENT_CREATE_OBJECT_REQUIRED:
            self.handleClientCreateObjectRequired(dg, dgi)
        elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
            doId = dgi.getUint32()
            fieldId = dgi.getUint16()
            print "DEBUG: Got Toontown field update for Toontown doId = %d and Toontown fieldId = %d" % (doId, fieldId)
        elif msgType == CLIENT_OBJECT_DELETE:
            self.handleClientDeleteObject(dg, dgi.getUint32())
        elif msgType == CLIENT_OBJECT_DISABLE:
            self.handleClientDisable(dg, dgi.getUint32())
        elif msgType == CLIENT_ADD_INTEREST:
            #self.handleClientAddInterest(self, Client, dgi)
           
            handle = dgi.getUint16()
            contextId = dgi.getUint32()
            parentId = dgi.getUint32()
            zoneList = [dgi.getUint32()]  
            print 'DEBUG: Network :: Interest -> (%d, %d, %d)' % (handle, contextId, parentId)
            while True:
                remainingData = (dg.getLength() - dgi.getCurrentIndex())
                if remainingData == 0:
                    break
                zoneList.append(dgi.getUint32())
            if handle == 2: #Aww yeah we found the tewtow shard list interest!
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(4618) #parentId
                datagram.addUint32(3) #zoneId
                datagram.addUint16(58) #ToontownDistrict DClass Field
                datagram.addUint32(316000000) #Shard ID (doId)
                datagram.addString('Astron is for n00bs') #District name
                datagram.addUint8(1) # 1 - Enabled 0 - Disabled
                datagram.addBool(0)
                self.cw.send(datagram, connection)
            if handle == 4:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(4618) #parentId
                datagram.addUint32(3) #zoneId
                datagram.addUint16(387) #ToontownDistrict DClass Field
                datagram.addUint32(900000000) #Shard ID (doId)
                datagram.addString("2013-08-22 23:49:46")
                self.cw.send(datagram, connection)
               
                datagran2 = PyDatagram()
                datagran2.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagran2.addUint32(0)
                datagran2.addUint32(0)
                datagran2.addUint16(172)
                datagran2.addUint32(637100008)
                arg = []
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                #arg = [64, 65, 66, 10, 15]
                datagran2.addUint16(len(arg))
                for i in arg:
                    datagran2.addUint16(int(i))
                self.cw.send(datagran2, connection)
           
            if handle == 5:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_OBJECT_UPDATE_FIELD)
                datagram.addUint32(1) #doId
                datagram.addUint16(112) #fieldId
                datagram.addUint32(316000000)
                self.cw.send(datagram, connection)
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_DONE_INTEREST_RESP)
            datagram.addUint16(handle)
            datagram.addUint32(contextId)
            datagram.addUint32(parentId)
            for zoneId in zoneList:
                datagram.addUint32(zoneId)
            self.cw.send(datagram, connection)
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_DONE_INTEREST_RESP)
            datagram.addUint16(handle)
            datagram.addUint32(contextId)
            datagram.addUint32(parentId)
            for zoneId in zoneList:
                datagram.addUint32(zoneId)
            self.cw.send(datagram, connection)
        elif msgType == CLIENT_REMOVE_INTEREST:
            return None
        #Lets start with the tewtow specific msgtypes.
        elif msgType == CLIENT_LOGIN_TOONTOWN:
            self.handleClientLoginToontown(dgi, connection)
        elif msgType == CLIENT_GET_AVATARS:
            self.handleGetAvatars(dgi, connection)			

        elif msgType == CLIENT_GET_AVATARS:
            self.handleGetAvatars(dgi, connection)

        elif msgType == CLIENT_CREATE_AVATAR:
            #return None
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_CREATE_AVATAR_RESP)
            datagram.addUint16(0) #echoContext
            datagram.addUint8(0) #returnCode
            datagram.addUint32(1)
            self.cw.send(datagram, connection)
        elif msgType == CLIENT_SET_NAME_PATTERN:
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_SET_NAME_PATTERN_ANSWER)
            datagram.addUint32(1)
            datagram.addUint8(0)
            self.cw.send(datagram, connection)
        elif msgType == CLIENT_SET_AVATAR:
                packer = DCPacker()
                dclass = self.dclassesByName['DistributedToon']
                datagram = PyDatagram()
                datagram.addUint16(15) #CLIENT_GET_AVATAR_DETAILS_RESP Msgtype
                datagram.addUint32(1)
                datagram.addUint8(0)
                datagram.addString('Infinity') #Toon name
                datagram.addString('Unknown')
                datagram.addUint32(0)
                datagram.addBool(1)
                datagram.addString('t\x05\x01\x00\x01\x39\x1b\x33\x1b\31\x1b\x14\x00\x14\x14') #DNA (blob)
                datagram.addUint8(1) #GM
                datagram.addUint16(2500) #Max Bank
                datagram.addUint16(0) #Current Bank
                datagram.addUint16(40) #Max Jellybeans
                datagram.addUint16(0) #Current Jellybeans
                datagram.addUint16(15) #Max Laff
                datagram.addUint16(15) #Current Laff
                datagram.addUint32(0) #Battle ID
                datagram.addString('Unknown') #Experience (blob)
                datagram.addUint8(10) #Max Gag Carry
 
                #setTrackAccess
 
                field = dclass.getField(13)
                print field
                arg = [0, 0, 0, 0, 1, 1, 0]
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addInt16(int(i))

                datagram.addInt8(3) #Track Progress 1
                datagram.addUint32(9) #Track Progress 2
 
               
 
                #setTrackBonusLevel
 
                field = dclass.getField(15)
                print field
 
                arg = [0, 0, 0, 0, 1, 1, 0]
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addInt8(int(i))

                datagram.addString('') #setInventory
 
                #setMaxNPCFriends (Uint16)
 
                datagram.addUint16(16)
               
 
                arg = []
                datagram.addUint16(len(arg) * 5)
                for i in arg:
                    datagram.addUint32(int(i))
 
                datagram.addUint32(316000000) #setDefaultShard
 
                datagram.addUint32(2000) #setDefaultZone
 
                datagram.addString('')
 
 
                field = dclass.getField(22)
                print field
 
                arg = [1000, 2000 , 3000, 4000, 5000, 6000, 8000, 9000, 10000, 11000, 12000, 13000]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 

                field = dclass.getField(23)
                print field
 
                arg = [1000, 2000 , 3000, 4000, 5000, 6000, 8000, 9000, 10000, 11000, 12000, 13000]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                datagram.addString('') #setInterface
 
                datagram.addUint32(2000) #setLastHood
 
                datagram.addUint8(1) #setTutorialAck
 
                datagram.addUint32(25) #setMaxClothes
 
                #setClothesTopsList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
 
                #setClothesBottomsList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint32(0) #setMaxAccessories
 
                #setHatList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setGlassessList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setBackpackList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setShoesList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(0) #setHat 1
                datagram.addUint8(0) #setHat 2
                datagram.addUint8(0) #setHat 3
 
                datagram.addUint8(0) #setGlasses 1
                datagram.addUint8(0) #setGlasses 2
                datagram.addUint8(0) #setGlasses 3
 
                datagram.addUint8(0) #setBackpack 1
                datagram.addUint8(0) #setBackpack 2
                datagram.addUint8(0) #setBackpack 3
 
                datagram.addUint8(0) #setShoes 1
                datagram.addUint8(0) #setShoes 2
                datagram.addUint8(0) #setShoes 3
 
                datagram.addString('')
 
                #setEmoteAccess(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCustomMeeages(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addString('') #setResistanceMessages
 
                #setPetTrickPhrases(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint16(0) #setCatalogSchedule 1
                datagram.addUint32(0) #setVatalogSchedule 2
 
                datagram.addString('') #setCatalog 1
                datagram.addString('') #setCatalog 2
                datagram.addString('') #setCatalog 3
 
                datagram.addString('') #setMailBoxContents
 
                datagram.addString('') #SetDeliverySchedule
 
                datagram.addString('') #setGiftSchedule
 
                datagram.addString('') #setAwardMailboxContents
 
                datagram.addString('') #setAwardSchedule
 
                datagram.addUint8(0) #setAwardNotify
 
                datagram.addUint8(0) #setCatalogNotify 1
 
                datagram.addUint8(0) #setCatalogNotify 2
 
                datagram.addUint8(0) #setSpeedChatStyleIndex
 
                #setTeleportAccess (uint32array)
 
                arg = [1000, 2000 , 3000, 4000, 5000, 6000, 8000, 9000, 10000, 11000, 12000, 13000]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogStatus (uint32array)
                arg = []
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogCount (uint32array)
                arg = []
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogRadar(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setBuildingRadar(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCogLevels(uint8array)
 
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCogTypes(uint8array)
 
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCogParts (uint32array)
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogMerits(uint16array)
 
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint32(0) #setHouseId
 
                #setQuests (uint32array)
                arg = []
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setQuestHistory(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint8(0) #setRewardHistory 1
 
                #setRewardHistory 2(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
 
                datagram.addUint8(1) #setQuestCarryLimit
 
                datagram.addInt16(0) #setCheesyEffect 1
                datagram.addUint32(0) #setCheesyEffect 2
                datagram.addUint32(0) #setCheesyEffect 3
 
                datagram.addUint8(0) #setPosIndex
 
                #setFishCollection 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishCollection 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishCollection 3(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint8(20) #setMaxFishTank
 
                #setFishTank 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishTank 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishTank 3(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint8(1) #setFishingRod
 
                #setFishingTrophies(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerCollection 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerCollection 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerBasket 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerBasket 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(25) #setMaxFlowerBasket
 
                #setGardenTrophies(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(1) #setShovel
 
                datagram.addUint32(0) #setShovelSkill
 
                datagram.addUint8(1) #setWateringCan
 
                datagram.addUint32(0) #setWateringCanSkill
 
                datagram.addUint32(0) #setPetID
 
                datagram.addUint8(0) #setPetTutorialDone
 
                datagram.addUint8(0) #setFishBingoTutorialDone
 
                datagram.addUint8(0) #setFishBingoMarkTutorialDone
 
                datagram.addInt8(0) #setKartBodyType
 
                datagram.addInt8(0) #setKartBodyColor
 
                datagram.addInt8(0) #setKartAccessoryColor
 
                datagram.addInt8(0) #setKartEngineBlockType
 
                datagram.addInt8(0) #setKartSpoilerType
 
                datagram.addInt8(0) #setKartFrontWheelWellType
 
                datagram.addInt8(0) #setKartBackWheelWellType
 
                datagram.addInt8(0) #setKartRimType
 
                datagram.addInt8(0) #setKartDecalType
 
                datagram.addUint32(100) #setTickets
 
                datagram.addUint8(0) #setKartingHistory 1
                datagram.addUint8(0) #setKartingHistory 2
                datagram.addUint8(0) #setKartingHistory 3
                datagram.addUint8(0) #setKartingHistory 4
                datagram.addUint8(0) #setKartingHistory 5
                datagram.addUint8(0) #setKartingHistory 6
                datagram.addUint8(0) #setKartingHistory 7
                datagram.addUint8(0) #setKartingHistory 8
                datagram.addUint8(0) #setKartingHistory 9
                datagram.addUint8(0) #setKartingHistory 10
                datagram.addUint8(0) #setKartingHistory 11
                datagram.addUint8(0) #setKartingHistory 12
                datagram.addUint8(0) #setKartingHistory 13
                datagram.addUint8(0) #setKartingHistory 14
                datagram.addUint8(0) #setKartingHistory 15
                datagram.addUint8(0) #setKartingHistory 16
 
               
                datagram.addUint8(0) #setKartingTrophies 1
                datagram.addUint8(0) #setKartingTrophies 2
                datagram.addUint8(0) #setKartingTrophies 3
                datagram.addUint8(0) #setKartingTrophies 4
                datagram.addUint8(0) #setKartingTrophies 5
                datagram.addUint8(0) #setKartingTrophies 6
                datagram.addUint8(0) #setKartingTrophies 7
                datagram.addUint8(0) #setKartingTrophies 8
                datagram.addUint8(0) #setKartingTrophies 9
                datagram.addUint8(0) #setKartingTrophies 11
                datagram.addUint8(0) #setKartingTrophies 11
                datagram.addUint8(0) #setKartingTrophies 12
                datagram.addUint8(0) #setKartingTrophies 13
                datagram.addUint8(0) #setKartingTrophies 14
                datagram.addUint8(0) #setKartingTrophies 15
                datagram.addUint8(0) #setKartingTrophies 16
                datagram.addUint8(0) #setKartingTrophies 17
                datagram.addUint8(0) #setKartingTrophies 18
                datagram.addUint8(0) #setKartingTrophies 19
                datagram.addUint8(0) #setKartingTrophies 20
                datagram.addUint8(0) #setKartingTrophies 21
                datagram.addUint8(0) #setKartingTrophies 22
                datagram.addUint8(0) #setKartingTrophies 23
                datagram.addUint8(0) #setKartingTrophies 24
                datagram.addUint8(0) #setKartingTrophies 25
                datagram.addUint8(0) #setKartingTrophies 26
                datagram.addUint8(0) #setKartingTrophies 27
                datagram.addUint8(0) #setKartingTrophies 28
                datagram.addUint8(0) #setKartingTrophies 29
                datagram.addUint8(0) #setKartingTrophies 30
                datagram.addUint8(0) #setKartingTrophies 31
                datagram.addUint8(0) #setKartingTrophies 32
                datagram.addUint8(0) #setKartingTrophies 33
 
                datagram.addUint32(0) #setKartingPersonalBest 1
                datagram.addUint32(0) #setKartingPersonalBest 2
                datagram.addUint32(0) #setKartingPersonalBest 3
                datagram.addUint32(0) #setKartingPersonalBest 4
                datagram.addUint32(0) #setKartingPersonalBest 5
                datagram.addUint32(0) #setKartingPersonalBest 6
 
                datagram.addUint32(0) #setKartingPersonalBest2 1
                datagram.addUint32(0) #setKartingPersonalBest2 2
                datagram.addUint32(0) #setKartingPersonalBest2 3
                datagram.addUint32(0) #setKartingPersonalBest2 4
                datagram.addUint32(0) #setKartingPersonalBest2 5
                datagram.addUint32(0) #setKartingPersonalBest2 6
                datagram.addUint32(0) #setKartingPersonalBest2 7
                datagram.addUint32(0) #setKartingPersonalBest2 8
                datagram.addUint32(0) #setKartingPersonalBest2 9
                datagram.addUint32(0) #setKartingPersonalBest2 10
                datagram.addUint32(0) #setKartingPersonalBest2 11
                datagram.addUint32(0) #setKartingPersonalBest2 12
 
                #setKartAccessoriesOwned [16]
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
 
                #setCogSummonsEarned
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(0) #setGardenStart
 
                #setGolfHistory [18]
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
 
                #setPackedGolfHoleBest [18]
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
 
                #setGolfCourseBest
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
 
                datagram.addUint8(0) #setPinkSlips
 
                datagram.addUint8(0) #setNametagStyle

                self.cw.send(datagram, connection)

               
        elif msgType == CLIENT_SET_WISHNAME:
            #print dgi
            avId = dgi.getUint16()
            unknown = dgi.getString()
            pendingName = dgi.getString()
            print pendingName
            divide = pendingName.split(' ')
            lenStr = len(divide)
            s = 0
            while s != lenStr:
                nameCheck = divide[s]
                s += 1
            with open ("TewtowBlacklist.txt", "r") as badWordFile:
                data=badWordFile.readlines()
                for word in data:
                    chrList = list(word)
                    if chrList.count('\n') == 1:
                        chrList.remove('\n')
                    badWord = ''.join(chrList)
                    if nameCheck == badWord:
                        print 'Bad name detected, are you trying to get banned?'
                        datagram = PyDatagram()
                        datagram.addUint16(CLIENT_SET_WISHNAME_RESP)
                        datagram.addUint32(avId)
                        datagram.addUint16(0)
                        datagram.addString('NO')
                        datagram.addString('NO')
                        datagram.addString('')
                        message = PyDatagram()
                        message.addUint16(CLIENT_SYSTEM_MESSAGE)
                        message.addString('Sorry, That name is not allowed.')
                        self.cw.send(message, connection)
                    else:
                        datagram = PyDatagram()
                        datagram.addUint16(CLIENT_SET_WISHNAME_RESP)
                        datagram.addUint32(avId)
                        datagram.addUint16(0)
                        datagram.addString('NO')
                        datagram.addString('')
                        datagram.addString('NO')
                        self.cw.send(datagram, connection)
 
        elif msgType == CLIENT_OBJECT_LOCATION:
            doId = dgi.getUint32()
            parentId = dgi.getUint32()
            zoneId = dgi.getUint32()
            print 'Network :: Location -> (%d, %d, %d)' % (doId, parentId, zoneId)
            if zoneId == 2000:
               
                #DistributedMickey
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(65)
                datagram.addUint32(433103088)
                datagram.addString("a")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)
           
            if zoneId == 1000:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(108)
                datagram.addUint32(433103088)
                datagram.addString("DockedEast")
                datagram.addInt16(100)
                self.cw.send(datagram, connection)
            if zoneId == 5000:
                '''
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                datagram.addUint16(68)
                datagram.addUint32(433103088)
                datagram.addString("a")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)
                '''
               
        #self.cw.send(datagram, connection)
            if zoneId == 2000:
                pass
                '''#message = PyDatagram()
                #message.addUint16(CLIENT_SYSTEM_MESSAGE)
                #message.addString('Surprised? I thought so. :P')
                #self.cw.send(message, connection)
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(65)
                datagram.addUint32(433103088)
                datagram.addString("b")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)'''
               
            if zoneId == 3000:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(79)
                datagram.addUint32(433103089)
                datagram.addString("a")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)
               
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_GET_STATE_RESP)
                self.cw.send(datagram, connection)

			
        else:
            self.notify.warning('Got a datagram %d; but could not handle it.' % msgType)
Ejemplo n.º 51
0
 def client_processing(self,datagram):
     data_iter = PyDatagramIterator(datagram)
     msgID = data_iter.getUint16()
     if msgID == PRINT_MESSAGE:
         messageToPrint = data_iter.getString()
         print messageToPrint
     if msgID == ARMY_MOVE:
         army_id = data_iter.getInt16()
         ax = data_iter.getFloat64()
         ay = data_iter.getFloat64()
         tx = data_iter.getFloat64()
         ty = data_iter.getFloat64()
         base.armies[army_id].node_path.setX(ax)
         base.armies[army_id].node_path.setY(ay)
         base.armies[army_id].move_to_point(tx,ty)
     if msgID == CLIENT_INIT_UPDATE:
         p1_name = data_iter.getString()
         p1_kingdom = data_iter.getString()
         p1_ready = data_iter.getInt32()
         game_map = data_iter.getInt32()
         base.menu_manager.menus["mp-game"].client_update(p1_name,p1_kingdom,p1_ready,game_map)
     if msgID == SERVER_CHAT:
         r = data_iter.getInt32()
         g = data_iter.getInt32()
         b = data_iter.getInt32()
         text = data_iter.getString()
         base.menu_manager.menus["mp-game"].chat_add((r,g,b),text)
     if msgID == SERVER_READY:
         but_id = data_iter.getInt32()
         state = data_iter.getInt32()
         base.menu_manager.menus["mp-game"].obj_list[but_id]["indicatorValue"]=state
         base.menu_manager.menus["mp-game"].start_game_check()
     if msgID == SERVER_LOADED:
         base.menu_manager.menus["mp-load"].load()
     if msgID == ALL_LOADED:
         base.menu_manager.menus["mp-load"].load_complete()
     if msgID == GAME_START:
         base.menu_manager.menu_goto("mp-load")
     if msgID == MAP_SET:
         map = data_iter.getInt32()
         base.menu_manager.menus["mp-game"].map_selected = map
         mapname = base.menu_manager.menus["mp-game"].maplist[map]["fullname"]
         mapimage = base.menu_manager.menus["mp-game"].maplist[map]["preview"]
         base.menu_manager.menus["mp-game"].obj_list[11]["text"]=mapname
         base.menu_manager.menus["mp-game"].obj_list[10].setImage(mapimage)
     if msgID == BATTLE_TURN:
         bat = data_iter.getInt32()
         turn = data_iter.getInt32()
         base.battles[bat].turn_change(turn)
     if msgID == BATTLE_START:
         a1 = data_iter.getInt32()
         a1_x = data_iter.getFloat32()
         a1_y = data_iter.getFloat32()
         a2 = data_iter.getInt32()
         a2_x = data_iter.getFloat32()
         a2_y = data_iter.getFloat32()
         army_start = data_iter.getInt32()
         base.armies[a1].stop()
         base.armies[a2].stop()
         base.armies[a1].node_path.setPos(a1_x,a1_y,0)
         base.armies[a2].node_path.setPos(a2_x,a2_y,0)
         base.battles.append(TimObjects.Battle([base.armies[a1],base.armies[a2]],army_start))
     if msgID == BATTLE_CLASH:
         battle = data_iter.getInt32()
         a1 = data_iter.getInt32()
         a2 = data_iter.getInt32()
         result = data_iter.getString()
         buff = data_iter.getInt8()
         base.battles[battle].clash(base.armies[a1],base.armies[a2],result,buff)
     if msgID == BATTLE_ARMYADD:
         bat = data_iter.getInt32()
         army = data_iter.getInt32()
         a_x = data_iter.getFloat32()
         a_y = data_iter.getFloat32()
         base.battles[bat].add_army(base.armies[army])
         base.armies[army].node_path.setPos(a_x,a_y,0)
     if msgID == BATTLE_END:
         bat = data_iter.getInt32()
         base.battles[bat].end()
     if msgID == BUILD_START:
         t_id = data_iter.getInt32()
         player = data_iter.getInt8()
         type = data_iter.getString()
         base.towers[t_id].build_start()
     if msgID == TOWER_CAPTURE:
         t_id = data_iter.getInt32()
         player = data_iter.getInt8()
         base.towers[t_id].change_owner(player)
     if msgID == BUILD_CANCEL:
         t_id = data_iter.getInt32()
         base.towers[t_id].build_cancel()
     if msgID == BUILD_COMPLETE:
         t_id = data_iter.getInt32()
         player = data_iter.getInt8()
         type = data_iter.getString()
         base.towers[t_id].create_counter()
Ejemplo n.º 52
0
 def handleDatagram(self, datagram):
     connection = datagram.getConnection()
     dgi = PyDatagramIterator(datagram)
     message_type = dgi.getUint16()
Ejemplo n.º 53
0
class MyApp(ShowBase):
    uname = None

    def __init__(self):
        ShowBase.__init__(self)

        self.cManager = QueuedConnectionManager()
        self.cListener = QueuedConnectionListener(self.cManager, 0)
        self.cReader = QueuedConnectionReader(self.cManager, 0)
        self.cWriter = ConnectionWriter(self.cManager, 0)

        host = "localhost"
        port = 6002
        self.connection = self.cManager.openTCPClientConnection(
            host, port, 10000)

        self.received = 1

        if self.connection:
            self.cReader.addConnection(self.connection)
            #taskMgr.add(self.updateRoutine, 'updateRoutine')

            # LOGIN Request Starts
            self.uname = raw_input('Enter username :'******'Enter password :'******'Login')
            if (self.received):
                print "->Client request:"
        # Send a request to the server

            myPyDatagram101 = PyDatagram()
            prot = 101
            myPyDatagram101.addUint16(prot)
            myPyDatagram101.addString(self.uname)
            myPyDatagram101.addString(self.password)
            self.cWriter.send(myPyDatagram101, self.connection)
            self.received = 0
            taskMgr.add(self.receiveResponse101, 'Login')

    def sendRequest101(self):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram101 = PyDatagram()
        prot = 101
        myPyDatagram101.addUint16(prot)
        myPyDatagram101.addString(self.uname)
        myPyDatagram101.addString(self.password)
        self.cWriter.send(myPyDatagram101, self.connection)
        self.received = 0

    def receiveResponse101(self, task):

        while self.cReader.dataAvailable():
            datagram = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram):
                self.myIterator = PyDatagramIterator(datagram)
                print "<-Server response:"
                print self.myIterator.getUint16()
                self.msg = self.myIterator.getUint32()
                self.l = self.myIterator.getUint32()
                if self.msg is not None:
                    if self.l is not 0:
                        for x in range(0, self.l):
                            print self.myIterator.getString()
                            print self.myIterator.getUint32()
                            print self.myIterator.getUint32()

                    print self.msg, " received"
                    #raw_input("Press Enter to continue...")

                    self.received = 0
                    taskMgr.remove('Login')

                    #1-Character creatopm
                    #taskMgr.add(self.sendRequest104, 'CharacterCreation')

                    #2-heartbeat of playgame after login
                    MyApp.sendRequest113(self)
        return task.again

# LOGIN Request End

        # CHARACTER CREATION Starts

    def sendRequest104(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram = PyDatagram()
        prot = 104
        cname = raw_input('Character Name :')
        faction_id_104 = raw_input('press 0 for Red Or 1 for Blue ? :')
        classType_104 = raw_input('press 0 for Axe Or 1 for Sword ? :')
        myPyDatagram.addUint16(prot)
        myPyDatagram.addString(cname)
        myPyDatagram.addUint32(faction_id_104)
        myPyDatagram.addUint32(classType_104)
        self.cWriter.send(myPyDatagram, self.connection)

        print "104 sent"
        self.received = 0
        taskMgr.add(self.receiveResponse104, "characterresponse")

    def receiveResponse104(self, task):

        while self.cReader.dataAvailable():
            datagram = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram):
                self.myIterator1 = PyDatagramIterator(datagram)
                print '------'
                print self.myIterator1.getUint16()
                self.msg = self.myIterator1.getUint32()
                if self.msg is not None:
                    print "<-Server response:"
                    print self.msg, " received"
                    raw_input("Press Enter to continue...")
                    self.received = 0
                    taskMgr.remove('CharacterCreation')
                    taskMgr.add(self.sendRequest106, 'move')

        return task.again

        #CHARACTER CREATION Ends

    # Move Starts
    def sendRequest106(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram106 = PyDatagram()
        prot = 106
        xpos = raw_input('X Position :')
        ypos = raw_input('Y Position :')
        zpos = raw_input('Z Position :')
        hpos = raw_input('Heading (0 to 360):')
        ismoving = raw_input('Moving ? -- 0 for NO , 1 for YES :')
        myPyDatagram106.addUint16(prot)
        myPyDatagram106.addUint32(xpos)
        myPyDatagram106.addUint32(ypos)
        myPyDatagram106.addUint32(zpos)
        myPyDatagram106.addUint32(hpos)
        myPyDatagram106.addUint32(ismoving)
        self.cWriter.send(myPyDatagram106, self.connection)

        self.received = 0
        taskMgr.add(self.receiveResponse106, "characterresponse")

    def receiveResponse106(self, task):
        while self.cReader.dataAvailable():
            datagram6 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram6):

                myIterator = PyDatagramIterator(datagram6)
                print myIterator.getUint16()

                msg = myIterator.getString()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # Attack
                    #raw_input("Press Enter to continue...")
                    taskMgr.add(self.sendRequest108, 'health')
        return task.again
        #Move Ends

    #Change Health Starts
    def sendRequest108(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram108 = PyDatagram()
        prot = 108
        change_Health = raw_input('Change in health (-100 to 100):')
        myPyDatagram108.addUint16(prot)
        myPyDatagram108.addUint32(change_Health)
        self.cWriter.send(myPyDatagram108, self.connection)

        self.received = 0
        taskMgr.add(self.receiveResponse108, "healthresponse")

    def receiveResponse108(self, task):

        while self.cReader.dataAvailable():
            datagram8 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram8):
                myIterator = PyDatagramIterator(datagram8)
                print myIterator.getUint16()
                msg = myIterator.getString()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    self.received = 1
                    # CP State
                    raw_input("Press Enter to continue...")
                    taskMgr.add(self.sendRequest107, 'attack')
        #Change Health Ends
        return task.again

    # Attack Starts
    def sendRequest107(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram107 = PyDatagram()
        prot = 107
        attackId = raw_input('Attack Id (0 or 1):')
        myPyDatagram107.addUint16(prot)
        myPyDatagram107.addUint32(attackId)
        self.cWriter.send(myPyDatagram107, self.connection)

        #print " sent"
        self.received = 0
        taskMgr.add(self.receiveResponse108, "attackresponse")

    def receiveResponse107(self, task):

        while self.cReader.dataAvailable():
            datagram7 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram7):
                myIterator = PyDatagramIterator(datagram7)
                print myIterator.getUint16()
                msg = myIterator.getString()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # Change Health
                    taskMgr.add(self.sendRequest112, 'CP Capture')
        return task.again
        #Attack Ends

    #CP Capture Starts
    def sendRequest112(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram112 = PyDatagram()
        prot = 112
        CP_id = raw_input('Control Point ID (1 to 5): ')
        faction_id = raw_input('press 0 for Red Or 1 for Blue ? :')
        myPyDatagram112.addUint16(prot)
        myPyDatagram112.addUint32(CP_id)
        myPyDatagram112.addUint32(faction_id)
        self.cWriter.send(myPyDatagram112, self.connection)

        #print " sent"
        self.received = 0
        taskMgr.add(self.receiveResponse112, "CPCaptureRes")

    def receiveResponse112(self, task):

        while self.cReader.dataAvailable():
            datagram12 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram12):
                myIterator = PyDatagramIterator(datagram12)
                print myIterator.getUint16()
                msg = myIterator.getUint32()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    raw_input("Press Enter to continue...")
                    self.received = 1
#HeartBeat
                    #raw_input("Press Enter to continue...")
                    #taskMgr.add(self.communicate105, 'chat')

        #CP Capture Ends

    # CHAT Starts
    def communicate105(self, task):
        #print "communicate"
        self.sendRequest105()
        self.receiveResponse105(task)
        return task.again

    def sendRequest105(self):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram105 = PyDatagram()
        prot = 105
        chat = raw_input('Insert Chat Message :')
        myPyDatagram105.addUint16(prot)
        myPyDatagram105.addString(chat)
        self.cWriter.send(myPyDatagram105, self.connection)

        print " sent"
        self.received = 0

    def receiveResponse105(self, task):
        print "<-Server response:"
        while self.cReader.dataAvailable():
            datagram5 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram5):
                myIterator = PyDatagramIterator(datagram5)
                print myIterator.getUint16()
                msg = myIterator.getUint16()
                print msg, " received"
                if msg is not None:
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # Move
                    raw_input("Press Enter to continue...")
                    taskMgr.add(self.communicate111, 'CP state')

        #CHAT Ends

    #CP State Starts
    def communicate111(self, task):
        #print "communicate"
        self.sendRequest111()
        self.receiveResponse111(task)
        return task.again

    def sendRequest111(self):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram111 = PyDatagram()
        prot = 111
        CP_id = raw_input('Control Point ID (1 to 5): ')
        CP_state = raw_input('Control Point state (1 red, 2 blue, 3 purple): ')
        myPyDatagram111.addUint16(prot)
        myPyDatagram111.addUint16(CP_id)
        myPyDatagram111.addUint16(CP_state)
        self.cWriter.send(myPyDatagram111, self.connection)

        print " sent"
        self.received = 0

    def receiveResponse111(self, task):
        print "<-Server response:"
        while self.cReader.dataAvailable():
            datagram11 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram11):
                myIterator = PyDatagramIterator(datagram11)
                print myIterator.getUint16()
                msg = myIterator.getUint16()
                print msg, " received"
                if msg is not None:
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # CP Capture
                    raw_input("Press Enter to continue...")
                    taskMgr.add(self.communicate102, 'Logout')
        #CP State Ends

    # LOGOUT Starts
    def communicate102(self, task):
        #print "communicate"
        self.sendRequest102()
        self.receiveResponse102(task)
        return task.again

    def sendRequest102(self):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram102 = PyDatagram()
        prot = 102
        myPyDatagram102.addUint16(prot)
        self.cWriter.send(myPyDatagram102, self.connection)

        print " sent"
        self.received = 0

    def receiveResponse102(self, task):
        print "<-Server response:"
        while self.cReader.dataAvailable():
            datagram2 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram2):
                myIterator = PyDatagramIterator(datagram2)
                print myIterator.getUint16()
                msg = myIterator.getUint16()
                print msg, " received"
                if msg is not None:
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # Register
                    raw_input("Press Enter to continue...")
                    taskMgr.add(self.communicate301, 'Heartbeat')

        #LOGOUT Ends

        #HeartBeat Starts
    def communicate301(self):
        #print "communicate"
        self.sendRequest301()
        self.receiveResponse301()

#return task.again;

    def sendRequest301(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram301 = PyDatagram()
        prot = 301
        myPyDatagram301.addUint16(prot)
        self.cWriter.send(myPyDatagram301, self.connection)
        self.received = 0
        return task.again

    def receiveResponse301(self):

        while self.cReader.dataAvailable():
            datagram301 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram301):
                myIterator = PyDatagramIterator(datagram301)
                p = myIterator.getUint16()
                if p == 213:
                    un = myIterator.getString()
                    cname = myIterator.getString()
                    ctype = myIterator.getUint32()
                    cteam = myIterator.getUint32()
                    if un == MyApp.uname:
                        abc = 'abc'
                    else:
                        print cname + ' just joined a game......!! hurray'

                    #print msg, " received"

                    self.received = 1

        #HeartBeat Ends

    #heartbeat
    def sendRequest113(self):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram113 = PyDatagram()
        prot = 113
        myPyDatagram113.addUint16(prot)
        print MyApp.uname + '-------'
        if MyApp.uname == 'chintan':
            myPyDatagram113.addUint32(18)
        elif MyApp.uname == 'paras':
            myPyDatagram113.addUint32(35)
        else:
            myPyDatagram113.addUint32(3)
        self.cWriter.send(myPyDatagram113, self.connection)
        self.received = 0
        #taskMgr.add(self.updateRoutine,'update113')
        #taskMgr.doMethodLater(1,self.sendRequest301,'HeatBeat')
        MyApp.retrieve113(self)

    def retrieve113(self):
        taskMgr.add(self.updateRoutine, 'update113')
        taskMgr.doMethodLater(1, self.sendRequest301, 'HeatBeat')

    def updateRoutine(self, task):
        self.receiveResponse301()
        return task.again
Ejemplo n.º 54
0
def myProcessDataFunction(datagram):
  global status, P1NAME, P2NAME, lastResetRequest
  global MY_POSITION, kicker, texKicker, texKicker2, mode

  if (role==ROLE_SERVER):
    sender = activeConnections.index(datagram.getConnection()) 
  data = PyDatagramIterator(datagram)
  #try:
  if True: #just to keep the indent, in case we need "try" again. 
    pktType = data.getUint16()
    if role==ROLE_SERVER: # packets received only by server
      if pktType==PACKET_MOVE:
        setOpponentMove(data, sender+1)
      elif pktType==PACKET_MSG:
        timer = data.getUint16()
        msg   = data.getString()
        sendMessage(msg, timer) #broadcast to all
      elif pktType==PACKET_HELLO:
        magic = data.getString()
        proto = data.getUint16()
        soft  = data.getString()
        if magic != MAGIC_WORD:
          print "Connecting party did not identify as netkickern client."
          sys.exit(1)
        if proto != PROTOCOL_VERSION:
          print "Connecting party used incompatible protocol version "+str(proto)+"."
          print "We are using "+str(PROTOCOL_VERSION)+"."
          sys.exit(1)
        if soft != SOFTWARE_VERSION:
          print "WARNING: Client is using software "+soft+"."
        print "Ok, client "+str(sender+1)+" connected."
        status = STATUS_INIT
        qpref = PyDatagram() #query for client preferences
        qpref.addUint16(PACKET_QPREF)
        qpref.addString(SOFTWARE_VERSION)
        cWriter.send(qpref, activeConnections[sender])
      elif pktType==PACKET_PREF:
        if status != STATUS_INIT:
          return
        prefs = {}
        teamname = data.getString()
        prefs['team']=teamname
        place = -1
        if (mode == MODE_4P):
          #assign the last free position, and P1 only if the teamname matches or everything else is given away
          if not POSITION[3]:
            place = 3
          if not POSITION[2]:
            place = 2
          if (teamname == TEAMNAME) or (place==-1):
            if not POSITION[1]:
              place = 1
          print "placed player ", sender+1, " at position ", place
          POSITION[place]=sender+1
          prefs['pos'] = place
        playerPrefs[sender]=prefs
        if (mode == MODE_2P) or (0 in playerPrefs and 1 in playerPrefs and 2 in playerPrefs):
          P1NAME = TEAMNAME
          P2NAME = playerPrefs[0]['team']
          rename = PyDatagram() 
          rename.addUint16(PACKET_NAME)
          rename.addString(P1NAME) 
          rename.addString(P2NAME) 
          toAll(rename, activeConnections)
          if (mode == MODE_4P): #inform players of the position they play in
            for i in range(0,3):
              placing = PyDatagram()
              placing.addUint16(PACKET_PLACE)
              placing.addUint16(playerPrefs[i]['pos'])
              cWriter.send(placing, activeConnections[i])
          resetNames()
          welcome = PyDatagram()
          welcome.addUint16(PACKET_START)
          toAll(welcome, activeConnections)
          startGame()
      elif pktType==PACKET_PONG:
        stime = data.getFloat64()
        now = time.time()
        deltatime = now-stime   # TODO: use this to delay mouse movements by avg(deltatime)/2
        print "player "+str(sender)+" network delay: "+str(deltatime*500)+"ms " #rtt/2
      elif pktType==PACKET_RESET:
        lastResetRequest = time.time()
        playerPrefs[sender]['lastReset']=lastResetRequest
        if not isResetConfirmed():
          resetRequest=PyDatagram() #forward to all clients 
          resetRequest.addUint16(PACKET_RESET)
          #resetRequest.addUint16(sender) # TODO: tell everyone which player sent the request
          toAll(resetRequest, activeConnections) 
          setMessage("Player "+str(sender+1)+" wishes to reset the ball.\nPress Space to confirm.", 3)
    else: # packets received only by clients
      if pktType==PACKET_SET:
        setGameStatus(data)
      elif pktType==PACKET_SCORE:
        setScore(data)
      elif pktType==PACKET_QPREF:
        soft = data.getString()
        if soft != SOFTWARE_VERSION:
          print "WARNING: Server is using software "+soft+"."
        status = STATUS_INIT
        pref = PyDatagram()
        pref.addUint16(PACKET_PREF)
        pref.addString(TEAMNAME)
        cWriter.send(pref, serverConnection)     
      elif pktType==PACKET_START:
        print "connection to game host confirmed."
        startGame()
      elif pktType==PACKET_MSG:
        timer = data.getUint16()
        msg   = data.getString()
        setMessage(msg, timer)
      elif pktType==PACKET_NAME:
        P1NAME = data.getString()
        P2NAME = data.getString()
        resetNames()
      elif pktType==PACKET_PLACE: #4P only
        MY_POSITION = data.getUint16()
        mode = MODE_4P
        resetGameColours(kicker, texKicker, texKicker2)  
      elif pktType==PACKET_PING:
        stime = data.getFloat64()
        pong = PyDatagram()
        pong.addUint16(PACKET_PONG)
        pong.addFloat64(stime)
        cWriter.send(pong, serverConnection)
      elif pktType==PACKET_RESET:
        setMessage("Another wishes to reset the ball.\nPress Space to confirm.", 3)
  #except Exception, e:
  #  print e 
  #  sys.exit(1) #wow, this is what I call exception handling.. 
  return