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()
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 = []