You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.2 KiB
Python
61 lines
1.2 KiB
Python
import msgpack
|
|
|
|
GREETINGS = 0xEB
|
|
|
|
PROTOCOL_VERSION = 1
|
|
|
|
OP_NOP = 0
|
|
OP_PUBLISH = 1
|
|
OP_SUBSCRIBE = 2
|
|
OP_UNSUBSCRIBE = 3
|
|
OP_MESSAGE = 0x12
|
|
OP_BROADCAST = 0x13
|
|
OP_ACK = 0xFE
|
|
|
|
RESPONSE_OK = 0x01
|
|
ERR_CLIENT_NOT_REGISTERED = 0x71
|
|
ERR_DATA = 0x72
|
|
ERR_IO = 0x73
|
|
ERR_OTHER = 0x74
|
|
ERR_NOT_SUPPORTED = 0x75
|
|
ERR_BUSY = 0x76
|
|
ERR_NOT_DELIVERED = 0x77
|
|
ERR_TIMEOUT = 0x78
|
|
|
|
PING_FRAME = b'\x00' * 9
|
|
|
|
RPC_NOTIFICATION_HEADER = b'\x00'
|
|
RPC_REQUEST_HEADER = b'\x01'
|
|
RPC_REPLY_HEADER = b'\x11'
|
|
RPC_ERROR_REPLY_HEADER = b'\x12'
|
|
|
|
RPC_NOTIFICATION = 0x00
|
|
RPC_REQUEST = 0x01
|
|
RPC_REPLY = 0x11
|
|
RPC_ERROR = 0x12
|
|
|
|
RPC_ERROR_CODE_PARSE = -32700
|
|
RPC_ERROR_CODE_INVALID_REQUEST = -32600
|
|
RPC_ERROR_CODE_METHOD_NOT_FOUND = -32601
|
|
RPC_ERROR_CODE_INVALID_METHOD_PARAMS = -32602
|
|
RPC_ERROR_CODE_INTERNAL = -32603
|
|
|
|
|
|
def serialize(data):
|
|
return msgpack.dumps(data)
|
|
|
|
|
|
def deserialize(data):
|
|
return msgpack.unpackb(data)
|
|
|
|
|
|
class RpcException(Exception):
|
|
|
|
def __init__(self, msg='', code=RPC_ERROR_CODE_INTERNAL):
|
|
self.rpc_error_code = code
|
|
self.rpc_error_payload = msg
|
|
super().__init__(msg if isinstance(msg, str) else msg.decode())
|
|
|
|
def __str__(self):
|
|
return super().__str__() + f' (code: {self.rpc_error_code})'
|