Exemplo n.º 1
0
 protected virtual void OnReciveTextPacket(WebSocketProtocol aSender, IWebSocketPacket e)
 {
     if (recivePacket != null)
     {
         recivePacket(aSender, e);
     }
 }
Exemplo n.º 2
0
 public void SendToWebSocket(IWebSocketPacket packet)
 {
     lock (webSocketServer)
         foreach (var session in webSocketServer.GetAllSessions())
         {
             session.Send(packet.SerializeJson());
         }
 }
Exemplo n.º 3
0
 public static IToken PacketToToken(string aFormat, IWebSocketPacket aDataPacket)
 {
     if (aFormat.Equals(WebSocketConstants.WS_FORMAT_JSON))
     {
         return(JSONTokenProcessor.PacketToToken(aDataPacket));
     }
     else if (aFormat.Equals(WebSocketConstants.WS_SUBPROT_CSV))
     {
         throw new NotImplementedException(WebSocketMessage.NOT_IMPLEMENTED_YET);
     }
     else if (aFormat.Equals(WebSocketConstants.WS_FORMAT_XML))
     {
         throw new NotImplementedException(WebSocketMessage.NOT_IMPLEMENTED_YET);
     }
     return(null);
 }
Exemplo n.º 4
0
 internal void SendPacket(IWebSocketPacket aPacket)
 {
     try
     {
         lock (mWriteLock)
             SendInternal(WebSocketProtocolAbstraction.RawToProtocolPacket(aPacket));
     }
     catch (Exception)
     {
         if (mLog.IsErrorEnabled)
         {
             mLog.Error(WebSocketMessage.ERROR_WHILE_SENDING_SOCKET);
         }
         OnError(new WebSocketError(WebSocketMessage.ERROR_WHILE_SENDING_SOCKET));
         StopIt();
     }
 }
Exemplo n.º 5
0
        protected override void OnReciveTextPacket(WebSocketProtocol aSender, IWebSocketPacket e)
        {
            if (recivePacket != null)
            {
                recivePacket(aSender, e);
            }
            try
            {
                JsonObject lTextjson = new JsonObject(e.GetString());

                IToken lToken = PacketToToken(e);
                string lType  = lToken.GetType();

                lock (PendingResponseQueue)
                {
                    if (!lType.Equals(WebSocketMessage.WELCOME) && !lType.Equals(WebSocketMessage.GOODBYTE))
                    {
                        try
                        {
                            int lUTID = lToken.GetInt(WebSocketMessage.UTID);
                            int lCode = lToken.GetInt(WebSocketMessage.CODE);

                            PendingResponseQueue lPRQI = PendingResponseQueue[lUTID];
                            if (lPRQI != null)
                            {
                                bool lSuccess = false;
                                if (lCode == 0)
                                {
                                    lSuccess = true;
                                }

                                TokenResponse lResponse = new TokenResponse(mPendingResponseQueue[lUTID].Token, lToken, lSuccess);
                                lPRQI.PendingResponse.Invoke(this, lResponse);
                                PendingResponseQueue.Remove(lUTID);
                            }
                        }
                        catch (Exception) { }
                    }
                }
                OnReciveTokenText(lToken);
            }
            catch (Exception) { }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Calls the with timeout.
        /// </summary>
        /// <param name="aAction">Action.</param>
        /// <param name="aTimeoutMilliseconds">Timeout milliseconds.</param>
        /// <param name="lPacket">WebSocket Packet.</param>
        public static void CallWithTimeout(Action<IWebSocketPacket> aAction, int aTimeoutMilliseconds, IWebSocketPacket lPacket)
        {
            Thread lThreadToKill = null;
            Action lWrappedAction = () =>
            {
                lThreadToKill = Thread.CurrentThread;
                aAction(lPacket);
            };

            IAsyncResult lResult = lWrappedAction.BeginInvoke(null, null);
            if (lResult.AsyncWaitHandle.WaitOne(aTimeoutMilliseconds))
            {
                lWrappedAction.EndInvoke(lResult);
            }
            else
            {
                lThreadToKill.Abort();
                throw new TimeoutException(WebSocketMessage.TIMEOUT);
            }
        }
Exemplo n.º 7
0
        public static IToken PacketToToken(IWebSocketPacket aDataPacket)
        {
            try
            {
                JsonObject json = new JsonObject(aDataPacket.GetString());
                Dictionary <string, object> lDictionary = new Dictionary <string, object>();

                for (int i = 0; i < json.Count; i++)
                {
                    lDictionary.Add(json.Keys.ElementAt(i), json.Values.ElementAt(i));
                }

                return(new Token(lDictionary));
            }
            catch (Exception lEx)
            {
                if (mLog.IsErrorEnabled)
                {
                    mLog.Error(lEx.Source + WebSocketMessage.SEPARATOR + lEx.Message);
                }
                return(null);
            }
        }
Exemplo n.º 8
0
 private IToken PacketToToken(IWebSocketPacket aDataPacket)
 {
     return JSONTokenProcessor.PacketToToken(aDataPacket);
 }
Exemplo n.º 9
0
        protected override void OnReciveTextPacket(WebSocketProtocol aSender, IWebSocketPacket e)
        {
            if (recivePacket != null)
                recivePacket(aSender, e);
            try
            {
                JsonObject lTextjson = new JsonObject(e.GetString());

                IToken lToken = PacketToToken(e);
                string lType = lToken.GetType();

                lock (PendingResponseQueue)
                {
                    if (!lType.Equals(WebSocketMessage.WELCOME) && !lType.Equals(WebSocketMessage.GOODBYTE))
                    {
                        try
                        {
                            int lUTID = lToken.GetInt(WebSocketMessage.UTID);
                            int lCode = lToken.GetInt(WebSocketMessage.CODE);

                            PendingResponseQueue lPRQI = PendingResponseQueue[lUTID];
                            if (lPRQI != null)
                            {
                                bool lSuccess = false;
                                if (lCode == 0)
                                    lSuccess = true;

                                TokenResponse lResponse = new TokenResponse(mPendingResponseQueue[lUTID].Token, lToken, lSuccess);
                                lPRQI.PendingResponse.Invoke(this, lResponse);
                                PendingResponseQueue.Remove(lUTID);
                            }
                        }
                        catch (Exception) { }
                    }
                }
                OnReciveTokenText(lToken);
            }
            catch (Exception) { }
        }
        public static byte[] RawToProtocolPacket(IWebSocketPacket aDataPacket)
        {
            byte[] lBuff = new byte[2];
            WebSocketFrameType lFrameType = aDataPacket.FrameType;
            int lTargetType = (int)lFrameType;

            if (lTargetType.Equals(-1))
                throw new WebSocketRuntimeException(WebSocketMessage.CANNOT_CONSTRUCT_PACKET
                    + WebSocketMessage.TWO_POINT + lFrameType);

            if(aDataPacket.IsFragmented)
                lBuff[0] = (byte)(lTargetType | 0x80);
            else
                lBuff[0] = (byte)(lTargetType);

            int lPayloadLen = aDataPacket.ByteArray.Length;

            if (lPayloadLen < 126)
                lBuff[1] = (byte)(lPayloadLen | 0x80);
            else if (lPayloadLen >= 126 && lPayloadLen < 0xFFFF)
            {
                lBuff[1] = (byte)(126 | 0x80);
                int lSize = lBuff.Length;
                lBuff = CopyOf(lBuff, lSize + 2);
                lBuff[lSize] = (byte)((lPayloadLen >> 8) & 0xFF);
                lBuff[lSize + 1] = (byte)(lPayloadLen & 0xFF);
            }
            else if (lPayloadLen >= 0xFFFF)
            {
                lBuff[1] = (byte)(127 | 0x80);
                long lLen = (long)lPayloadLen;
                int lSize = lBuff.Length;
                lBuff = CopyOf(lBuff, lSize + 8);
                lBuff[lSize] = (byte)(lLen >> 56);
                lBuff[lSize + 1] = (byte)(lLen >> 48);
                lBuff[lSize + 2] = (byte)(lLen >> 40);
                lBuff[lSize + 3] = (byte)(lLen >> 32);
                lBuff[lSize + 4] = (byte)(lLen >> 24);
                lBuff[lSize + 5] = (byte)(lLen >> 16);
                lBuff[lSize + 6] = (byte)(lLen >> 8);
                lBuff[lSize + 7] = (byte)lLen;
            }

            int lSizes = lBuff.Length;
            lBuff = CopyOf(lBuff, lSizes + 4);
            lBuff[lSizes] = (byte)mRan.Next(0, 255);
            lBuff[lSizes + 1] = (byte)mRan.Next(0, 255);
            lBuff[lSizes + 2] = (byte)mRan.Next(0, 255);
            lBuff[lSizes + 3] = (byte)mRan.Next(0, 255);

            byte[] lMask = new byte[4];
            Array.Copy(lBuff, lBuff.Length - 4, lMask, 0, 4);

            byte[] lBuffData = new byte[aDataPacket.ByteArray.Length];
            Array.Copy(aDataPacket.ByteArray,0, lBuffData,0,lBuffData.Length);
            byte[] lMaskedData = new byte[lBuffData.Length];
            int lPos = 0;
            for (int i = 0; i < lBuffData.Length; i++)
            {
                lMaskedData[i] = (byte)Convert.ToInt32(lBuffData[i] ^ lMask[lPos]);
                if (lPos == 3)
                    lPos = 0;
                else
                    lPos++;
            }

            lBuff = CopyOf(lBuff, lBuff.Length + lMaskedData.Length);
            Array.Copy(lMaskedData, 0, lBuff, lBuff.Length - lMaskedData.Length, lMaskedData.Length);
            return lBuff;
        }
Exemplo n.º 11
0
        /// <summary>
        /// Calls the with timeout.
        /// </summary>
        /// <param name="aAction">Action.</param>
        /// <param name="aTimeoutMilliseconds">Timeout milliseconds.</param>
        /// <param name="lPacket">WebSocket Packet.</param>
        public static void CallWithTimeout(Action <IWebSocketPacket> aAction, int aTimeoutMilliseconds, IWebSocketPacket lPacket)
        {
            Thread lThreadToKill  = null;
            Action lWrappedAction = () =>
            {
                lThreadToKill = Thread.CurrentThread;
                aAction(lPacket);
            };

            IAsyncResult lResult = lWrappedAction.BeginInvoke(null, null);

            if (lResult.AsyncWaitHandle.WaitOne(aTimeoutMilliseconds))
            {
                lWrappedAction.EndInvoke(lResult);
            }
            else
            {
                lThreadToKill.Abort();
                throw new TimeoutException(WebSocketMessage.TIMEOUT);
            }
        }
Exemplo n.º 12
0
 protected virtual void OnReciveTextPacket(WebSocketProtocol aSender, IWebSocketPacket e)
 {
     if (recivePacket != null)
     {
         recivePacket(aSender, e);
     }
 }
Exemplo n.º 13
0
 internal void SendPacket(IWebSocketPacket aPacket)
 {
     try
     {
         lock (mWriteLock)
             SendInternal(WebSocketProtocolAbstraction.RawToProtocolPacket(aPacket));
     }
     catch (Exception)
     {
         if (mLog.IsErrorEnabled)
             mLog.Error(WebSocketMessage.ERROR_WHILE_SENDING_SOCKET);
         OnError(new WebSocketError(WebSocketMessage.ERROR_WHILE_SENDING_SOCKET));
         StopIt();
     }
 }
        public static byte[] RawToProtocolPacket(IWebSocketPacket aDataPacket)
        {
            byte[]             lBuff      = new byte[2];
            WebSocketFrameType lFrameType = aDataPacket.FrameType;
            int lTargetType = (int)lFrameType;

            if (lTargetType.Equals(-1))
            {
                throw new WebSocketRuntimeException(WebSocketMessage.CANNOT_CONSTRUCT_PACKET
                                                    + WebSocketMessage.TWO_POINT + lFrameType);
            }

            if (aDataPacket.IsFragmented)
            {
                lBuff[0] = (byte)(lTargetType | 0x80);
            }
            else
            {
                lBuff[0] = (byte)(lTargetType);
            }

            int lPayloadLen = aDataPacket.ByteArray.Length;

            if (lPayloadLen < 126)
            {
                lBuff[1] = (byte)(lPayloadLen | 0x80);
            }
            else if (lPayloadLen >= 126 && lPayloadLen < 0xFFFF)
            {
                lBuff[1] = (byte)(126 | 0x80);
                int lSize = lBuff.Length;
                lBuff            = CopyOf(lBuff, lSize + 2);
                lBuff[lSize]     = (byte)((lPayloadLen >> 8) & 0xFF);
                lBuff[lSize + 1] = (byte)(lPayloadLen & 0xFF);
            }
            else if (lPayloadLen >= 0xFFFF)
            {
                lBuff[1] = (byte)(127 | 0x80);
                long lLen  = (long)lPayloadLen;
                int  lSize = lBuff.Length;
                lBuff            = CopyOf(lBuff, lSize + 8);
                lBuff[lSize]     = (byte)(lLen >> 56);
                lBuff[lSize + 1] = (byte)(lLen >> 48);
                lBuff[lSize + 2] = (byte)(lLen >> 40);
                lBuff[lSize + 3] = (byte)(lLen >> 32);
                lBuff[lSize + 4] = (byte)(lLen >> 24);
                lBuff[lSize + 5] = (byte)(lLen >> 16);
                lBuff[lSize + 6] = (byte)(lLen >> 8);
                lBuff[lSize + 7] = (byte)lLen;
            }

            int lSizes = lBuff.Length;

            lBuff             = CopyOf(lBuff, lSizes + 4);
            lBuff[lSizes]     = (byte)mRan.Next(0, 255);
            lBuff[lSizes + 1] = (byte)mRan.Next(0, 255);
            lBuff[lSizes + 2] = (byte)mRan.Next(0, 255);
            lBuff[lSizes + 3] = (byte)mRan.Next(0, 255);

            byte[] lMask = new byte[4];
            Array.Copy(lBuff, lBuff.Length - 4, lMask, 0, 4);

            byte[] lBuffData = new byte[aDataPacket.ByteArray.Length];
            Array.Copy(aDataPacket.ByteArray, 0, lBuffData, 0, lBuffData.Length);
            byte[] lMaskedData = new byte[lBuffData.Length];
            int    lPos        = 0;

            for (int i = 0; i < lBuffData.Length; i++)
            {
                lMaskedData[i] = (byte)Convert.ToInt32(lBuffData[i] ^ lMask[lPos]);
                if (lPos == 3)
                {
                    lPos = 0;
                }
                else
                {
                    lPos++;
                }
            }

            lBuff = CopyOf(lBuff, lBuff.Length + lMaskedData.Length);
            Array.Copy(lMaskedData, 0, lBuff, lBuff.Length - lMaskedData.Length, lMaskedData.Length);
            return(lBuff);
        }
Exemplo n.º 15
0
 private IToken PacketToToken(IWebSocketPacket aDataPacket)
 {
     return(JSONTokenProcessor.PacketToToken(aDataPacket));
 }