Example #1
0
    def run(self):
        self.profile = ProfileMixin(g_profile)
        self.profile.begin()
        Log.critical('NPCServer initing pid:%s', self.pid)
        self.FPSInit(getFrameTime, 60)

        self.dispgroup = {}
        self.dispgroup['effectObjs'] = GameObjectGroup().initialize(
            gameObj=self, spriteClass=SpriteObj, teamcolor=(0x7f, 0x7f, 0x7f))
        self.dispgroup['objplayers'] = []

        self.quit = False
        self.allInited = False
        self.thistick = getFrameTime()
        self.clientDict = {}

        self.registerRepeatFn(self.prfps, 1)
        Log.info('NPCServer inited')

        # wait for game is ready
        while not self.toGameCh.canReadFrom():
            time.sleep(0)
        self.toGameCh.readFrom()  # recv start packet
        self.reqState()
        for i in range(self.aicount):
            self.makeTeam()

        Log.info('start serverLoop')

        self.recvlist = [self.toGameCh.reader]
        self.sendlist = []
        while not self.quit:
            self.sendlist = [
                self.toGameCh.writer] if self.toGameCh.canSend() else []
            inputready, outputready, exceptready = select.select(
                self.recvlist, self.sendlist, [], 0)

            if len(inputready) == 0 and len(outputready) == 0:
                self.FPSRun()
                self.FPSYield()
                self.thistick = self.frameinfo.thisFrameTime

            for i in inputready:
                if i == self.toGameCh.reader:
                    idno, packet = self.toGameCh.readFrom()
                    if idno[-1] == -1:
                        self.quit = True
                        break
                    if packet is not None:
                        self.process1Cmd(idno, packet)

            for o in outputready:
                if o == self.toGameCh.writer:
                    self.toGameCh.writeFromQueue()

        Log.critical('NPCServer end.')
        self.prfps(0)

        self.profile.end()
Example #2
0
    def beforeLoop(self):
        self.allInited = False
        self.thistick = getFrameTime()
        self.clientDict = {}

        # wait for game is ready
        while not self.mainChannel.canReadFrom():
            time.sleep(0)
        self.mainChannel.readFrom()  # recv start packet

        for i in range(self.aicount):
            self.mainChannel.sendQueue.put(
                ((self.serverType, getSerial()),
                 toGzJsonParams(
                     cmd='sayHello',
                     teamname='AI_%08X' % random.getrandbits(32),
                     teamcolor=[random.randint(0, 255) for i in [0, 1, 2]]
                 )))

        self.recvList = [self.mainChannel.reader]
        self.sendList = []