Exemple #1
0
        private byte[] serializeMessage(BinaryMessage m)
        {
            try
            {
                MemoryStream ms = new MemoryStream();

                StringBuilder str = new StringBuilder();
                str
                .Append(m.id)
                .Append('$')
                .Append((int)m.packetType).Append(':')
                .Append(m.eventName).Append(':')
                .Append(m.command)
                .Append('$');

                // write header
                byte[] header = Encoding.UTF8.GetBytes(str.ToString());
                ms.Write(BitConverter.GetBytes(header.Length), 0, 4);
                ms.Write(header, 0, header.Length);

                // write message
                ms.Write(BitConverter.GetBytes(m.message.Length), 0, 4);
                ms.Write(m.message, 0, m.message.Length);

                // write verification char
                ms.Write(Encoding.UTF8.GetBytes("$"), 0, 1);
                return(ms.ToArray());
            }
            catch (Exception) { return(null); }
        }
Exemple #2
0
        public bool emit(string eventName, string command, byte[] message)
        {
            if (this.state != NetEventIOClientState.Authenticated)
            {
                return(false);
            }

            BinaryMessage m = new BinaryMessage(PacketType.S_binaryEvent, eventName, command, message);

            return(this.sendMessage(m));
        }
Exemple #3
0
        public bool handleBinaryEvent(BinaryMessage m)
        {
            if (this.state != NetEventIOClientState.Authenticated || m.packetType != PacketType.C_binaryEvent)
            {
                return(false);
            }
            OnBinaryMessage listener = null;

            try
            {
                listener = this.binaryMessageListeners[m.eventName];
            }
            catch (Exception) { return(false); }
            if (listener == null)
            {
                return(false);
            }

            // emit event
            listener(this, m);
            return(true);
        }
Exemple #4
0
        public void Run(bool debug)
        {
            byte[] message;
            bool   isBinary;

            // get messages
            while (this.client.isConnected())
            {
                if (debug)
                {
                    Console.WriteLine("Esperant a rebre un missatge");
                }
                if (!this.client.receiveData(out message, out isBinary) || message == null)
                {
                    Console.WriteLine("ERROR REBENT MISSATGE");
                    this.disconnected();
                    return;
                }
                if (isBinary)
                {
                    BinaryMessage binaryMessage = this.parseMessage(message);
                    if (binaryMessage != null)
                    {
                        this.handleBinaryEvent(binaryMessage);
                    }
                    continue;
                }
                Message newMessage;
                try
                {
                    newMessage = this.parseMessage(Encoding.UTF8.GetString(message));
                }
                catch (Exception)
                {
                    continue;
                }
                if (newMessage != null)
                {
                    if (debug)
                    {
                        Console.WriteLine("rebre un missatge " + newMessage.eventName + " " + newMessage.packetType);
                    }
                    // switch by packet type on the initialization
                    switch (newMessage.packetType)
                    {
                    case PacketType.C_init:
                    {
                        this.handleInit(newMessage);
                        break;
                    }

                    case PacketType.C_authSend:
                    {
                        this.handleAuth(newMessage);
                        break;
                    }

                    case PacketType.C_sendEvent:
                    {
                        this.handleEvent(newMessage);
                        break;
                    }

                    case PacketType.C_sendEventForCallback:
                    {
                        this.handleEventWithCallback(newMessage);
                        break;
                    }

                    case PacketType.C_subscribe:
                    {
                        this.handleSubscription(newMessage.eventName);
                        break;
                    }

                    case PacketType.C_unsubscribe:
                    {
                        this.handleUnsubscription(newMessage.eventName);
                        break;
                    }

                    case PacketType.C_unsubscribeAll:
                    {
                        this.handleUnsubscriptionAll();
                        break;
                    }

                    case PacketType.C_sendCallbackForEvent:
                    {
                        this.handleCallbackResponse(newMessage);
                        break;
                    }

                    default:
                    {
                        Console.WriteLine("Possible communication error with the client, one message was dropped.");
                        break;
                    }
                    }
                }
            }

            Console.WriteLine("HE ACABAT");
            this.disconnected();
        }
Exemple #5
0
 private bool sendMessage(BinaryMessage bm)
 {
     byte[] serializedMessage = this.serializeMessage(bm);
     return(this.client.sendData(serializedMessage, true));
 }
Exemple #6
0
        private BinaryMessage parseMessage(byte[] message)
        {
            try
            {
                // get the header size
                byte[] headerLengthInt = new byte[4];
                Array.Copy(message, 0, headerLengthInt, 0, headerLengthInt.Length);
                int headerLength = BitConverter.ToInt32(message, 0);

                // get the string header
                byte[] binaryHeader = new byte[headerLength];
                Array.Copy(message, 4, binaryHeader, 0, headerLength);
                string header = Encoding.UTF8.GetString(binaryHeader);

                // get the message length
                byte[] messageLengthInt = new byte[4];
                Array.Copy(message, headerLength + 4, messageLengthInt, 0, messageLengthInt.Length);
                int messageLength = BitConverter.ToInt32(messageLengthInt, 0);

                // get the binary message
                byte[] binaryMessage = new byte[messageLength];
                Array.Copy(message, headerLength + 8, binaryMessage, 0, binaryMessage.Length);

                // initial check
                if (header[header.Length - 1] != '$')
                {
                    return(null);
                }

                // get UUID
                int uuidEnd = header.IndexOf('$');
                if (uuidEnd == -1)
                {
                    return(null);
                }
                string uuid = header.Substring(0, uuidEnd);

                header = header.Substring(uuidEnd + 1);

                // get metadata
                int packetInitializationEnd = header.IndexOf('$');
                if (packetInitializationEnd == -1)
                {
                    return(null);
                }
                string[] metadata = header.Substring(0, packetInitializationEnd).Split(':');
                if (metadata.Length != 3)
                {
                    return(null);
                }

                BinaryMessage newMessage = new BinaryMessage();

                newMessage.id = uuid;

                newMessage.packetType = (PacketType)Int32.Parse(metadata[0]);
                newMessage.eventName  = metadata[1];
                newMessage.command    = metadata[2];

                newMessage.message = binaryMessage;

                return(newMessage);
            }
            catch (Exception e) { Console.WriteLine("No se pot parsejar " + e.ToString()); return(null); }
        }