Пример #1
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());
            }
        }
Пример #2
0
        public static TextMessage Deserialize(string rawMessage)
        {
			TextMessage msg = new TextMessage();
            //  '3:' [message id ('+')] ':' [message endpoint] ':' [data]
            //   3:1::blabla
			msg.RawMessage = rawMessage;

            string[] args = rawMessage.Split(SPLITCHARS, 4);
			if (args.Length == 4)
			{
				int id;
				if (int.TryParse(args[1], out id))
					msg.AckId = id;
				msg.Endpoint = args[2];
				msg.MessageText = args[3];
			}
			else
				msg.MessageText = rawMessage;
			
			return msg;
        }
Пример #3
0
		/// <summary>
		/// <para>Asynchronously sends payload using eventName</para>
		/// <para>payload must a string or Json Serializable</para>
		/// <para>Mimicks Socket.IO client 'socket.emit('name',payload);' pattern</para>
		/// <para>Do not use the reserved socket.io event names: connect, disconnect, open, close, error, retry, reconnect</para>
		/// </summary>
		/// <param name="eventName"></param>
		/// <param name="payload">must be a string or a Json Serializable object</param>
		/// <remarks>ArgumentOutOfRangeException will be thrown on reserved event names</remarks>
		public void Emit(string eventName, dynamic payload, string endPoint = "", Action<dynamic> callback = null)
		{

			string lceventName = eventName.ToLower();
			IMessage msg = null;
			switch (lceventName)
			{
				case "message":
					if (payload is string)
						msg = new TextMessage() { MessageText = payload };
					else
						msg = new JSONMessage(payload);
					this.Send(msg);
					break;
				case "connect":
				case "disconnect":
				case "open":
				case "close":
				case "error":
				case "retry":
				case "reconnect":
					throw new System.ArgumentOutOfRangeException(eventName, "Event name is reserved by socket.io, and cannot be used by clients or servers with this message type");
				default:
					if (!string.IsNullOrWhiteSpace(endPoint) && !endPoint.StartsWith("/"))
						endPoint = "/" + endPoint;
					msg = new EventMessage(eventName, payload, endPoint, callback);
					if (callback != null)
						this.registrationManager.AddCallBack(msg);

					this.Send(msg);
					break;
			}
		}
Пример #4
0
 public void Send(string msg)
 {
     IMessage message = new TextMessage() { MessageText =  msg };
     Send(message);
 }
Пример #5
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());
            }
        }