def time_listener(self, message: IXPFile = None): sH = message.get_info("hours") sM = message.get_info("minutes") sS = message.get_info("seconds") iH = int(sH) iM = int(sM) iS = int(sS) needsDateUpdate = False if self.__hours == -1: needsDateUpdate = True if self.__hours != 0 and iH == 0: needsDateUpdate = True if needsDateUpdate: server = Networking.instance.get_server() con = ClockNetworking.instance.get_connection() request = IXPFile() request.set_network_function("com.projectgame.clock.clock.getdate") server.ixp_request_async(con, request, lambda ixpFile: self.__date_listener(ixpFile)) self.__set_time(hours=iH, minutes=iM, seconds=iS)
def __message_received(self, connection: ConnectionIdentifier, ixpFile: IXPFile): for identifier in self.__asyncListeners: if connection != self.__asyncListenersConnections[identifier]: continue if self.__asyncListenersFunctions[identifier] != ixpFile.get_network_function(): continue if self.__asyncListenersTypes[identifier] == self.__ASYNC_LISTENER_TYPE_IXP: self.__asyncListenersCallbacks[identifier](ixpFile) elif self.__asyncListenersTypes[identifier] == self.__ASYNC_LISTENER_TYPE_BOO: pass elif self.__asyncListenersTypes[identifier] == self.__ASYNC_LISTENER_TYPE_INT: pass elif self.__asyncListenersTypes[identifier] == self.__ASYNC_LISTENER_TYPE_STR: pass self.__asyncListeners.remove(identifier) del self.__asyncListenersCallbacks[identifier] del self.__asyncListenersConnections[identifier] del self.__asyncListenersFunctions[identifier] del self.__asyncListenersTypes[identifier] return for identifier in self.__listeners: if connection != self.__listenerConnections[identifier]: continue func = self.__listenerFunctions[identifier] if func == ixpFile.get_network_function(): self.__listenerCallbacks[identifier](ixpFile)
def start(self): server = Networking.instance.get_server() con = ClockNetworking.instance.get_connection() server.register_message_listener(con, "clock_time_listener", self.time_listener) request = IXPFile() request.set_network_function("com.projectgame.clock.clock.registertotimeservice") request.add_info("functionName", "clock_time_listener") server.no_response_request(con, request)
def __date_listener(self, ixpFile: IXPFile): sY = ixpFile.get_info("year") sM = ixpFile.get_info("month") sD = ixpFile.get_info("day") sW = ixpFile.get_info("weekday") iY = int(sY) iM = int(sM) iD = int(sD) iW = int(sW) if iW == -1: iW = 6 for listener in self.__dateCallbacks: listener(year=iY, month=iM, day=iD, weekday=iW)
def start(self): server = Networking.instance.get_server() con = ClockNetworking.instance.get_connection() server.register_message_listener(con, self.__FUNCTION_TIMER_STARTED, self.__network_timer_started) server.register_message_listener(con, self.__FUNCTION_TIMER_STOPPED, self.__network_timer_stopped) server.register_message_listener(con, self.__FUNCTION_TIMER_UPDATED, self.__network_timer_updated) server.register_message_listener(con, self.__FUNCTION_TIMER_CALLED, self.__network_timer_called) request = IXPFile() request.set_network_function("com.projectgame.clock.timer.registertotimerservice") request.add_info("startedFunction", self.__FUNCTION_TIMER_STARTED) request.add_info("stoppedFunction", self.__FUNCTION_TIMER_STOPPED) request.add_info("updatedFunction", self.__FUNCTION_TIMER_UPDATED) request.add_info("calledFunction", self.__FUNCTION_TIMER_UPDATED) server.no_response_request(con, request)
def ixp_request_async(self, connection: ConnectionIdentifier, request: IXPFile, callback): """ override of superclass method """ identifier = AsyncListenerIdentifier() self.__asyncListeners.append(identifier) self.__asyncListenersCallbacks[identifier] = callback self.__asyncListenersConnections[identifier] = connection self.__asyncListenersFunctions[identifier] = request.get_network_function() self.__asyncListenersTypes[identifier] = self.__ASYNC_LISTENER_TYPE_IXP socket = self.__connections[connection] # type: BufferedIXPSocket socket.send(request)
def send(self, ixpFile: IXPFile): self.__client.write(ixpFile.get_xml())