def _send(self, socks, msg, no_make=False): """Raw function to send a message""" count = len(socks) for s in socks: try: if no_make: s.sendall(msg) else: s.sendall( message_key_types.make_message( PayloadType.Type_msgpack, msg)) self.stats.update_stats_increment("user_message", "sent_msg_to_user", 1) except: count -= 1 return count > 0
def _send_msg(self, dat): """Send the message to the core node Args: dat (dict): message object to send Returns: bytes: query ID for request/response type message """ if KeyType.domain_id not in dat or KeyType.source_user_id not in dat: self.logger.warn("Message must include domain_id and source_id") return None try: msg = message_key_types.make_message(PayloadType.Type_msgpack, dat) self.connection.sendall(msg) except Exception as e: self.logger.error(traceback.format_exc()) return None return self.query_id
def send_message_in_network(self, domain_id, dst_user_id, msg): """Send message to another user Args: domain_id (bytes): target domain_id dst_user_id (bytes): target user_id msg (dict): message to send """ dat = bytes( message_key_types.make_message(PayloadType.Type_msgpack, msg)) dst_info = bytearray(int(0).to_bytes(1, 'big')) dst_info.extend(int(len(dst_user_id)).to_bytes(1, 'big')) dst_info.extend(int(len(domain_id)).to_bytes(1, 'big')) dst_info.extend(dst_user_id) dst_info.extend(domain_id) dst_info = bytes(dst_info) if not self.redis_msg.exists(dst_info): self.redis_msg.lpush(dst_info, dat) self.redis_msg.expire(dst_info, MSG_EXPIRE_SECONDS) else: self.redis_msg.lpush(dst_info, dat) self.redis_pubsub.publish(domain_id, dst_info)
def direct_send_to_user(sock, msg): sock.sendall(message_key_types.make_message(PayloadType.Type_msgpack, msg))