Esempio n. 1
0
        protected void parseRawMessage(byte[] rawMessage)
        {
            MemoryStream stream = new MemoryStream(rawMessage);

            int protocol = stream.ReadInt();

            if (protocol != PROTOCOL_PREFIX)
            {
                throw new IOException("Invalid message header, expected REX0");
            }

            int cmd    = stream.ReadInt();
            int cmdLen = stream.ReadInt();

            if (cmdLen != stream.Length - 12)
            {
                throw new IOException("Invalid message size");
            }

            byte[] payload = stream.ReadFully(cmdLen);

            RawMessageReceivedEventHandler listener = RawListeners [cmd];

            if (listener != null)
            {
                listener(payload);
            }
            else
            {
                Console.WriteLine(this + ": Unhandled message " + cmd);
            }
        }
Esempio n. 2
0
        protected async Task <T> WaitResponseAsync <T>(int cmd, Func <byte[], T> handler)
        {
            TaskCompletionSource <T>       task    = new TaskCompletionSource <T>();
            RawMessageReceivedEventHandler wrapper = null;

            wrapper = (payload) => {
                RawListeners [cmd] -= wrapper;
                task.SetResult(handler(payload));
            };
            RawListeners [cmd] += wrapper;
            return(await task.Task);
        }