public void NewMessage(List<Object> data) { foreach (JArray socket_message in data) { WebSocketRailsEvent _event = new WebSocketRailsEvent(socket_message.ToObject<List<Object>>()); if (_event.IsResult) { if (queue.ContainsKey(_event.Id)) { queue[_event.Id].RunCallbacks(_event.IsSuccess, _event.Data); queue.Remove(_event.Id); } } else if (_event.IsChannel) { DispatchChannel(_event); } else if (_event.IsPing()) { Pong(); } else { Dispatch(_event); } if (State == "connecting" && _event.Name == "client_connected") ConnectionEstablished(_event.Data); } }
public void Trigger(WebSocketRailsEvent _event) { if (dispatcher.State == "connected") _webSocket.Send(_event.Serialize()); else message_queue.Add(_event); }
void webSocket_Closed(object sender, EventArgs e) { List<Object> data = new List<Object>(); data.Add("connection_closed"); data.Add(new Dictionary<String, Object>()); WebSocketRailsEvent closeEvent = new WebSocketRailsEvent(data); dispatcher.State = "disconnected"; dispatcher.Dispatch(closeEvent); }
public void ConnectionEstablished(Object data) { State = "connected"; if (data.GetType() == typeof(JObject)) { Dictionary<String, Object> infoDictionary = ((JObject)data) .ToObject<Dictionary<String, Object>>(); ConnectionId = (String)infoDictionary["connection_id"]; Connection.FlushQueue(); List<Object> frame = new List<Object>(); frame.Add("connection_opened"); frame.Add(new Dictionary<String, Object>()); WebSocketRailsEvent openedEvent = new WebSocketRailsEvent(frame); Dispatch(openedEvent); } }
public void Trigger(String eventName, Object data, EventHandler<WebSocketRailsDataEventArgs> success, EventHandler<WebSocketRailsDataEventArgs> failure) { List<Object> frame = new List<Object>(); frame.Add(eventName); if (data is Dictionary<string, object>) { frame.Add(data); } else { Dictionary<string, object> payload = new Dictionary<string, object>(); payload.Add("data", data); frame.Add(payload); } frame.Add(ConnectionId); WebSocketRailsEvent _event = new WebSocketRailsEvent(frame, success, failure); queue[_event.Id] = _event; Connection.Trigger(_event); }
private void Pong() { List<Object> frame = new List<Object>(); frame.Add("websocket_rails.pong"); frame.Add(new Dictionary<String, Object>()); frame.Add(ConnectionId); WebSocketRailsEvent pong = new WebSocketRailsEvent(frame); Connection.Trigger(pong); }
private void DispatchChannel(WebSocketRailsEvent _event) { if (! channels.ContainsKey(_event.Channel)) return; channels[_event.Channel].Dispatch(_event.Name, _event.Data); }
public void Dispatch(WebSocketRailsEvent _event) { if (! callbacks.ContainsKey(_event.Name)) return; foreach (EventHandler<WebSocketRailsDataEventArgs> callback in callbacks[_event.Name]) { callback(this, new WebSocketRailsDataEventArgs(_event.Data)); } }
public void TriggerEvent(WebSocketRailsEvent _event) { if (queue.ContainsKey(_event.Id) && queue[_event.Id] == _event) return; queue[_event.Id] = _event; Connection.Trigger(_event); }