Esempio n. 1
0
 /// <summary>
 /// Remove listener by type and callback instance
 /// </summary>
 /// /// <param name="type">event type</param>
 /// <param name="callback">callback instance</param>
 public void Off(string type, Action <IEnumerable <object> > callback)
 {
     if (EventListenersDict.ContainsKey(type))
     {
         EventListenersDict[type].Remove(callback);
     }
 }
Esempio n. 2
0
 /// <summary>
 /// Remove listeners by event type and index position
 /// </summary>
 /// <param name="type">event type</param>
 /// <param name="index">position</param>
 public void Off(string type, int index)
 {
     if (EventListenersDict.ContainsKey(type))
     {
         EventListenersDict[type].RemoveAt(index);
     }
 }
Esempio n. 3
0
 /// <summary>
 /// Remove listeners by event type
 /// </summary>
 /// <param name="type">event type</param>
 public void Off(string type)
 {
     if (EventListenersDict.ContainsKey(type))
     {
         EventListenersDict[type].Clear();
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Method for callback to receive message and emit information to listners
        /// </summary>
        /// <param name="result"></param>
        private void ReceiveMessage(byte[] result)
        {
            if (result == null)
            {
                return;
            }

            using (MemoryStream ms = new MemoryStream())
            {
                string jsonStr = null;

                ms.Write(result, 0, result.Length);
                ms.Seek(0, SeekOrigin.Begin);

                var iop = ms.ReadByte() - '0';
                if (iop == (byte)EngineIOPacketOp.OPEN)
                {
                    using (var sr = new StreamReader(ms))
                    {
                        jsonStr = sr.ReadToEnd();
                    }
                    ParseEngineIOInitValues(jsonStr);
                }
                else if (iop == (byte)EngineIOPacketOp.MESSAGE)
                {
                    var siop = ms.ReadByte() - '0';
                    if (siop == (byte)SocketIOPacketOp.EVENT)
                    {
                        //skip "," from packet
                        ms.Seek(ms.Position + Namespace.Length + 2, SeekOrigin.Begin);
                        using (var sr = new StreamReader(ms))
                        {
                            jsonStr = sr.ReadToEnd();
                        }
                        EmitToEventListeners(jsonStr);
                    }
                    else if (!isConnected && siop == (byte)SocketIOPacketOp.CONNECT)
                    {
                        //connect to socket.io
                        Socket.SendAsync(string.Format("{0}/{1}", IOConnectOpcode, Namespace));
                        isConnected = true;
                    }
                }
                else if (iop == (byte)EngineIOPacketOp.PONG)
                {
                    List <Action <IEnumerable <object> > > eventListeners = null;
                    if (EventListenersDict.TryGetValue("pong", out eventListeners))
                    {
                        foreach (var listener in eventListeners)
                        {
                            listener(new List <object>());
                        }
                    }
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Create Listener to a socket io event
        /// </summary>
        /// <param name="type">event type</param>
        /// <param name="callback">callback with event arguments</param>
        public void On(string type, Action <IEnumerable <object> > callback)
        {
            if (callback == null)
            {
                return;
            }

            List <Action <IEnumerable <object> > > eventListeners = null;

            if (EventListenersDict.TryGetValue(type, out eventListeners))
            {
                eventListeners.Add(callback);
            }
            else
            {
                EventListenersDict.Add(type, new List <Action <IEnumerable <object> > >()
                {
                    callback
                });
            }
        }
Esempio n. 6
0
        protected override void EmitToEventListeners(string jsonStr)
        {
            var jArr = JArray.Parse(jsonStr);

            if (jArr.Count == 0)
            {
                return;
            }

            string type = jArr[0].ToObject <string>();

            List <Action <IEnumerable <object> > > eventListeners = null;

            if (EventListenersDict.TryGetValue(type, out eventListeners))
            {
                var args = jArr.Skip(1);
                foreach (var listener in eventListeners)
                {
                    listener(args);
                }
            }
        }
        protected override void HandleEventResponse(IEnumerable <object> args)
        {
            var data = args.Cast <JToken>().First();

            var eventToken = data.SelectToken("event");

            if (eventToken == null)
            {
                throw new Exception("event type not found.");
            }

            string type = eventToken.ToObject <string>();

            List <Action <object> > eventListeners = null;

            if (EventListenersDict.TryGetValue(type, out eventListeners))
            {
                foreach (var listener in eventListeners)
                {
                    listener(data.SelectToken("payload"));
                }
            }
        }