protected virtual void OnReciveTextPacket(WebSocketProtocol aSender, IWebSocketPacket e) { if (recivePacket != null) { recivePacket(aSender, e); } }
public void SendToWebSocket(IWebSocketPacket packet) { lock (webSocketServer) foreach (var session in webSocketServer.GetAllSessions()) { session.Send(packet.SerializeJson()); } }
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); }
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(); } }
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) { } }
/// <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); } }
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); } }
private IToken PacketToToken(IWebSocketPacket aDataPacket) { return JSONTokenProcessor.PacketToToken(aDataPacket); }
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; }
/// <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); } }
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); }
private IToken PacketToToken(IWebSocketPacket aDataPacket) { return(JSONTokenProcessor.PacketToToken(aDataPacket)); }