コード例 #1
0
	    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);
	        }		
	    }
コード例 #2
0
	    public void Trigger(WebSocketRailsEvent _event) 
        {
	        if (dispatcher.State == "connected")
                _webSocket.Send(_event.Serialize());
	        else
                message_queue.Add(_event);
	    }
コード例 #3
0
        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);
        }
コード例 #4
0
	    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);   
	        }
	    }
コード例 #5
0
        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);
	    }
コード例 #6
0
	    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);
	    }
コード例 #7
0
	    private void DispatchChannel(WebSocketRailsEvent _event)
	    {
	        if (! channels.ContainsKey(_event.Channel))
	            return;
	    
	        channels[_event.Channel].Dispatch(_event.Name, _event.Data);
	    }
コード例 #8
0
	    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));
	        }		
	    }
コード例 #9
0
	    public void TriggerEvent(WebSocketRailsEvent _event) 
        {
	         if (queue.ContainsKey(_event.Id) && queue[_event.Id] == _event)
	             return;
	     
	         queue[_event.Id] = _event;
	         Connection.Trigger(_event);		
	    }