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()); } }
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; }
/// <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; } }
public void Send(string msg) { IMessage message = new TextMessage() { MessageText = msg }; Send(message); }
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()); } }