Example #1
0
        public static AckMessage Deserialize(string rawMessage)
        {
            AckMessage msg = new AckMessage();

            //  '6:::' [message id] '+' [data]
            //   6:::4
            //	 6:::4+["A","B"]
            msg.RawMessage = rawMessage;

            string[] args = rawMessage.Split(SPLITCHARS, 4);
            if (args.Length == 4)
            {
                msg.Endpoint = args[2];
                int      id;
                string[] parts = args[3].Split(new char[] { '+' });
                if (parts.Length > 1)
                {
                    if (int.TryParse(parts[0], out id))
                    {
                        msg.AckId       = id;
                        msg.MessageText = parts[1];
                        Match payloadMatch = reAckComplex.Match(msg.MessageText);

                        if (payloadMatch.Success)
                        {
                            msg.Json      = new JsonEncodedEventMessage();
                            msg.Json.args = new string[]  { payloadMatch.Groups["payload"].Value };
                        }
                    }
                }
            }
            return(msg);
        }
Example #2
0
        public static AckMessage Deserialize(string rawMessage)
        {
            AckMessage msg = new AckMessage();
            //  '6:::' [message id] '+' [data]
            //   6:::4
            //	 6:::4+["A","B"]
            msg.RawMessage = rawMessage;

            string[] args = rawMessage.Split(SPLITCHARS, 4);
            if (args.Length == 4)
            {
                msg.Endpoint = args[2];
                int id;
                string[] parts = args[3].Split(new char[] {'+'});
                if (parts.Length > 1)
                {
                    if (int.TryParse(parts[0], out id))
                    {
                        msg.AckId = id;
                        msg.MessageText = parts[1];
                        Match payloadMatch = reAckComplex.Match(msg.MessageText);

                        if (payloadMatch.Success)
                        {
                            msg.Json = new JsonEncodedEventMessage();
                            msg.Json.Args = new string[]  {payloadMatch.Groups["payload"].Value};
                        }
                    }
                }
            }
            return msg;
        }
Example #3
0
        public static IMessage Factory(string rawMessage)
        {
            if (reMessageType.IsMatch(rawMessage))
            {
                char id = rawMessage.First();
                switch (id)
                {
                case '0':
                    return(DisconnectMessage.Deserialize(rawMessage));

                case '1':
                    return(ConnectMessage.Deserialize(rawMessage));

                case '2':
                    return(new Heartbeat());

                case '3':
                    return(TextMessage.Deserialize(rawMessage));

                case '4':
                    return(JSONMessage.Deserialize(rawMessage));

                case '5':
                    return(EventMessage.Deserialize(rawMessage));

                case '6':
                    return(AckMessage.Deserialize(rawMessage));

                case '7':
                    return(ErrorMessage.Deserialize(rawMessage));

                case '8':
                    return(new NoopMessage());

                default:
                    Trace.WriteLine(string.Format("Message.Factory undetermined message: {0}", rawMessage));
                    return(new TextMessage());
                }
            }
            else
            {
                Trace.WriteLine(string.Format("Message.Factory did not find matching message type: {0}", rawMessage));
                return(new NoopMessage());
            }
        }
Example #4
0
        public static IMessage Factory(string rawMessage)
        {
            if (reMessageType.IsMatch(rawMessage))
            {
                char id = rawMessage.First();
                switch (id)
                {
                case '0':
                    return(DisconnectMessage.Deserialize(rawMessage));

                case '1':
                    return(ConnectMessage.Deserialize(rawMessage));

                case '2':
                    return(new Heartbeat());

                case '3':
                    return(TextMessage.Deserialize(rawMessage));

                case '4':
                    return(null);

                case '5':
                    return(EventMessage.Deserialize(rawMessage));

                case '6':
                    return(AckMessage.Deserialize(rawMessage));

                case '7':
                    return(ErrorMessage.Deserialize(rawMessage));

                case '8':
                    return(new NoopMessage());

                default:
                    return(new TextMessage());
                }
            }
            else
            {
                return(new NoopMessage());
            }
        }
Example #5
0
        public static AckMessage Deserialize(string rawMessage)
        {
            AckMessage msg = new AckMessage();

            msg.RawMessage = rawMessage;

            string askId = rawMessage.Substring(2, rawMessage.IndexOf("[") - 2);
            int    id;

            if (int.TryParse(askId, out id))
            {
                msg.AckId = id;
            }
            var groups = new Regex(@"\[([\s\S]*)\]", RegexOptions.IgnoreCase | RegexOptions.Compiled).Match(rawMessage).Groups;

            msg.RawMessage = groups[0].Value.Replace("\\", "");
            //jsonMsg.Event = groups[1].Value;
            msg.MessageText = groups[1].Value.Replace("\\", "").Trim('"');
            return(msg);
        }
        public void Subscribe(string eventName, Func<ISocketEventRequest, RequestResult> eventCallback, Action<ISocketEventResponse> subscribeReadyCallback = null)
        {
            this.socket.On(eventName, (msg) =>
            {
                var dto = JsonConvert.DeserializeObject<SocketEventRequestDto>(msg.Json.Args[0].ToString());
                var request = Mapper.Map<SocketEventRequestDto, SocketEventRequest>(dto);
                var result = eventCallback(request);

                // Simulate a ack callback because SocketIO4Net doesn't provide one by default.
                var msgText = JsonConvert.SerializeObject(new object[] {
                    new SocketEventResponseDto() {
                        RequestId = request.RequestId,
                        Status = result.ToString().ToUpper()
                    }
                });
                var ack = new AckMessage()
                {
                    AckId = msg.AckId,
                    MessageText = msgText
                };
                this.socket.Send(ack);
            });
            var subscribeDto = new SubscribeDto()
            {
                Event = eventName,
                SenderId = this.ClientId
            };
            this.socket.Emit(SUBSCRIBE, subscribeDto, string.Empty, (data) =>
            {
                var json = data as JsonEncodedEventMessage;
                var result = JsonConvert.DeserializeObject<SocketEventResponseDto>(json.Args[0]);
                var response = Mapper.Map<SocketEventResponseDto, SocketEventResponse>(result);

                if (subscribeReadyCallback != null)
                {
                    subscribeReadyCallback(response);
                }
            });
        }
Example #7
0
        public static IMessage Factory(string rawMessage)
        {
            if (Check(rawMessage))
            {
                string message = rawMessage.TrimStart('0');

                return(ConnectMessage.Deserialize(message));
            }

            if (ReMessageType.IsMatch(rawMessage))
            {
                char id = rawMessage.First();
                switch (id)
                {
                case '0':
                    return(DisconnectMessage.Deserialize(rawMessage));

                case '1':
                    return(ConnectMessage.Deserialize(rawMessage));

                case '2':
                    return(new Heartbeat());

                case '3':
                    return(TextMessage.Deserialize(rawMessage));

                case '4':
                    return(JSONMessage.Deserialize(rawMessage));

                case '5':
                    return(EventMessage.Deserialize(rawMessage));

                case '6':
                    return(AckMessage.Deserialize(rawMessage));

                case '7':
                    return(ErrorMessage.Deserialize(rawMessage));

                case '8':
                    return(new NoopMessage());

                default:
                    Trace.WriteLine(string.Format("Message.Factory undetermined message: {0}", rawMessage));
                    return(new TextMessage());
                }
            }

            if (rawMessage.IndexOf("[") > 0)
            {
                // int index = rawMessage.IndexOf("[");

                return(AckMessage.Deserialize(rawMessage));
            }
            //if (rawMessage == "3")
            //{
            //    return new Heartbeat();
            //}
            else
            {
                Trace.WriteLine(string.Format("Message.Factory did not find matching message type: {0}", rawMessage));
                return(new NoopMessage());
            }
        }