def _send(self, emsg, data={}, proto=None, jobid=None): if not isinstance(data, dict): raise ValueError("data kwarg can only be a dict") if proto is None: proto = find_proto(emsg) if not issubclass(proto, google.protobuf.message.Message): raise ValueError( "Unable to find proto for emsg, or proto kwarg is invalid") message = proto() proto_fill_from_dict(message, data) header = GCMsgHdrProto(emsg) if jobid is not None: header.proto.job_id_source = jobid if self.verbose_debug: str_message = '' str_header = str(header) str_body = str(message) if str_header: str_message += "-- header ---------\n%s\n" % str_header if str_body: str_message += "-- message --------\n%s\n" % str_body self._LOG.debug("Outgoing: %s\n%s" % (repr(emsg), str_message)) else: self._LOG.debug("Outgoing: %s", repr(emsg)) GameCoordinator.send(self, header, message.SerializeToString())
def _handle_from_gc(self, msg): if msg.body.appid != self.app_id: return emsg = msg.body.msgtype if is_proto(emsg): header = GCMsgHdrProto(emsg, msg.body.payload) header_size = GCMsgHdrProto._size + header.headerLength else: header = GCMsgHdr(emsg, msg.body.payload) header_size = GCMsgHdr._size body = msg.body.payload[header_size:] self._process_gc_message(clear_proto_bit(emsg), header, body)
def _handle_client_welcome(self, message): self._set_connection_status(GCConnectionStatus.HAVE_SESSION) # handle DOTAWelcome submessage = pb_gclient.CMsgDOTAWelcome() submessage.ParseFromString(message.game_data) if self.verbose_debug: self._LOG.debug("Got DOTAWelcome:\n%s" % str(submessage)) else: self._LOG.debug("Got DOTAWelcome") self.emit('dota_welcome', submessage) for extra in submessage.extra_messages: self._process_gc_message(extra.id, GCMsgHdrProto(extra.id), extra.contents)
def _send(self, emsg, data={}, proto=None, jobid=None): if not isinstance(data, dict): raise ValueError("data kwarg can only be a dict") if proto is None: proto = find_proto(emsg) if not issubclass(proto, google.protobuf.message.Message): raise ValueError( "Unable to find proto for emsg, or proto kwarg is invalid") message = proto() for key, value in data.items(): if isinstance(value, list): attr = getattr(message, key) try: attr.extend(value) except TypeError: map(lambda args: attr.add(**args), value) else: setattr(message, key, value) header = GCMsgHdrProto(emsg) if jobid is not None: header.proto.job_id_source = jobid if self.verbose_debug: str_message = '' str_header = str(header) str_body = str(message) if str_header: str_message += "-- header ---------\n%s\n" % str_header if str_body: str_message += "-- message --------\n%s\n" % str_body self._LOG.debug("Outgoing: %s\n%s" % (repr(emsg), str_message)) else: self._LOG.debug("Outgoing: %s", repr(emsg)) GameCoordinator.send(self, header, message.SerializeToString())