コード例 #1
0
        public WebSocketRailsChannel(String channelName, WebSocketRailsDispatcher dispatcher, bool isPrivate)
        {
            String eventName = null;

            if (isPrivate)
            {
                eventName = "websocket_rails.subscribe_private";
            }
            else
            {
                eventName = "websocket_rails.subscribe";
            }

            this.channelName = channelName;
            this.dispatcher  = dispatcher;

            JSONObject frame = new JSONObject(JSONObject.Type.ARRAY);

            frame.Add(eventName);

            JSONObject dataJSON = new JSONObject();
            JSONObject infoJSON = new JSONObject();

            infoJSON.AddField("channel", channelName);
            dataJSON.AddField("data", infoJSON);

            frame.Add(dataJSON);
            frame.Add(dispatcher.ConnectionId);
//            UnityEngine.Debug.LogWarning(frame);
            WebSocketRailsEvent _event = new WebSocketRailsEvent(frame, null, null);

            callbacks = new Dictionary <String, List <EventHandler <WebSocketRailsDataEventArgs> > >();

            dispatcher.TriggerEvent(_event);
        }
コード例 #2
0
        public void NewMessage(List <JSONObject> data)
        {
            foreach (JSONObject socket_message in data)
            {
                WebSocketRailsEvent _event = new WebSocketRailsEvent(socket_message);

                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);
                }
            }
        }
コード例 #3
0
        private void DispatchChannel(WebSocketRailsEvent _event)
        {
            if (!channels.ContainsKey(_event.Channel))
            {
                return;
            }

            channels[_event.Channel].Dispatch(_event.Name, _event.Data);
        }
コード例 #4
0
        public void TriggerEvent(WebSocketRailsEvent _event)
        {
            if (queue.ContainsKey(_event.Id) && queue[_event.Id] == _event)
            {
                return;
            }

            queue[_event.Id] = _event;
            connection.Trigger(_event);
        }
コード例 #5
0
 public void Trigger(WebSocketRailsEvent _event)
 {
     if (dispatcher.State == "connected")
     {
         message_queue.Add(_event);
     }
     else
     {
         webSocket.Send(_event.Serialize());
     }
 }
コード例 #6
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);
        }
コード例 #7
0
        void webSocket_Closed(object sender, EventArgs e)
        {
            JSONObject dataJSON = new JSONObject(JSONObject.Type.ARRAY);

            dataJSON.Add("connection_closed");
            dataJSON.Add(new JSONObject());

            WebSocketRailsEvent closeEvent = new WebSocketRailsEvent(dataJSON);

            dispatcher.State = "disconnected";
            dispatcher.Dispatch(closeEvent);
        }
コード例 #8
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);
        }
コード例 #9
0
        public void Trigger(WebSocketRailsEvent _event)
        {
            if (dispatcher.State != "connected")
            {
                message_queue.Add(_event);
            }
            else
            {
                webSocket.Send(_event.Serialize());
//                UnityEngine.Debug.LogError(_event.Serialize());
            }
        }
コード例 #10
0
        private void Pong()
        {
            JSONObject frame = new JSONObject(JSONObject.Type.ARRAY);

            frame.Add("websocket_rails.pong");
            frame.Add(new JSONObject());
            frame.Add(ConnectionId);

            WebSocketRailsEvent pong = new WebSocketRailsEvent(frame);

            connection.Trigger(pong);
        }
コード例 #11
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));
            }
        }
コード例 #12
0
        public void ConnectionEstablished(JSONObject dataJSON)
        {
            State        = "connected";
            ConnectionId = dataJSON["connection_id"].str;
            connection.FlushQueue(ConnectionId);

            JSONObject frame = new JSONObject();

            frame.Add("connection_opened");
            frame.Add(new JSONObject());

            WebSocketRailsEvent openedEvent = new WebSocketRailsEvent(frame);

            Dispatch(openedEvent);
        }
コード例 #13
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(ConnectionId);

                List <Object> frame = new List <Object>();
                frame.Add("connection_opened");
                frame.Add(new Dictionary <String, Object>());

                WebSocketRailsEvent openedEvent = new WebSocketRailsEvent(frame);
                Dispatch(openedEvent);
            }
        }
コード例 #14
0
        public void Trigger(String eventName, JSONObject message)
        {
            JSONObject frame = new JSONObject();

            frame.Add(eventName);

            JSONObject infoJSON = new JSONObject();

            infoJSON.AddField("channel", channelName);
            infoJSON.AddField("data", message);
            infoJSON.AddField("token", token);

            frame.Add(infoJSON);
            frame.Add(dispatcher.ConnectionId);

//            UnityEngine.Debug.LogError(frame);
            WebSocketRailsEvent _event = new WebSocketRailsEvent(frame, null, null);

            dispatcher.TriggerEvent(_event);
        }
コード例 #15
0
        public void Trigger(String eventName, Object message)
        {
            List <Object> frame = new List <Object>();

            frame.Add(eventName);

            Dictionary <String, Dictionary <String, Object> > data = new Dictionary <String, Dictionary <String, Object> >();

            Dictionary <String, Object> info = new Dictionary <String, Object>();

            info["channel"] = channelName;
            info["data"]    = message;
            info["token"]   = token;

            frame.Add(info);
            frame.Add(dispatcher.ConnectionId);

            WebSocketRailsEvent _event = new WebSocketRailsEvent(frame, null, null);

            dispatcher.TriggerEvent(_event);
        }
コード例 #16
0
        public void Destroy()
        {
            String eventName = "websocket_rails.unsubscribe";

            JSONObject frame = new JSONObject();

            frame.Add(eventName);

            JSONObject dataJSON = new JSONObject();
            JSONObject infoJSON = new JSONObject();

            infoJSON.AddField("channel", channelName);
            dataJSON.AddField("data", infoJSON);

            frame.Add(dataJSON);
            frame.Add(dispatcher.ConnectionId);

            WebSocketRailsEvent _event = new WebSocketRailsEvent(frame, null, null);

            dispatcher.TriggerEvent(_event);
            callbacks.Clear();
            isSubscribed = false;
        }
コード例 #17
0
        public WebSocketRailsChannel(String channelName, WebSocketRailsDispatcher dispatcher, bool isPrivate)
        {
            String eventName = null;

            if (isPrivate)
            {
                eventName = "websocket_rails.subscribe_private";
            }
            else
            {
                eventName = "websocket_rails.subscribe";
            }

            this.channelName = channelName;
            this.dispatcher  = dispatcher;

            List <Object> frame = new List <Object>();

            frame.Add(eventName);

            Dictionary <String, Object> data = new Dictionary <String, Object>();

            Dictionary <String, Object> info = new Dictionary <String, Object>();

            info["channel"] = channelName;

            data["data"] = info;

            frame.Add(data);
            frame.Add(dispatcher.ConnectionId);

            WebSocketRailsEvent _event = new WebSocketRailsEvent(frame, null, null);

            callbacks = new Dictionary <String, List <EventHandler <WebSocketRailsDataEventArgs> > >();

            dispatcher.TriggerEvent(_event);
        }
コード例 #18
0
        public void Destroy()
        {
            String eventName = "websocket_rails.unsubscribe";

            List <Object> frame = new List <Object>();

            frame.Add(eventName);

            Dictionary <String, Dictionary <String, Object> > data = new Dictionary <String, Dictionary <String, Object> >();

            Dictionary <String, Object> info = new Dictionary <String, Object>();

            info["channel"] = channelName;

            data["data"] = info;

            frame.Add(data);
            frame.Add(dispatcher.ConnectionId);

            WebSocketRailsEvent _event = new WebSocketRailsEvent(frame, null, null);

            dispatcher.TriggerEvent(_event);
            callbacks.Clear();
        }
コード例 #19
0
        public void Trigger(String eventName, JSONObject data, EventHandler <WebSocketRailsDataEventArgs> success, EventHandler <WebSocketRailsDataEventArgs> failure)
        {
            JSONObject frame = new JSONObject();

            frame.Add(eventName);

//            if (data.IsObject)
//            {
//                frame.Add(data);
//            }
//            else
//            {
            JSONObject payload = new JSONObject();

            payload.AddField("data", data);
            frame.Add(payload);
//            }

            frame.Add(connectionId);
            WebSocketRailsEvent _event = new WebSocketRailsEvent(frame, success, failure);

            queue[_event.Id] = _event;
            connection.Trigger(_event);
        }
コード例 #20
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);
        }