Exemplo n.º 1
0
 public void Close()
 {
     if (!WebSocketStateOfStatus.isWritable(mStatus))
     {
         return;
     }
     try
     {
         if (mLog.IsInfoEnabled)
         {
             mLog.Info(WebSocketMessage.CLOSE_CONNECTION);
         }
         lock (mWriteLock)
             SendCloseHandshake();
     }
     catch (Exception)
     {
         if (mLog.IsErrorEnabled)
         {
             mLog.Error(WebSocketMessage.ERROR_WHILE_CLOSE_CONNECTION);
         }
         OnError(new WebSocketError(WebSocketMessage.ERROR_WHILE_CLOSE_CONNECTION));
     }
     StopIt();
 }
Exemplo n.º 2
0
 internal void SendInternal(byte[] aData)
 {
     try
     {
         if (WebSocketStateOfStatus.isWritable(mStatus))
         {
             lock (mWriteLock)
             {
                 mNetStream.Write(aData, 0, aData.Length);
                 mNetStream.Flush();
             }
         }
     }
     catch (ObjectDisposedException lEx)
     {
         if (mLog.IsErrorEnabled)
         {
             mLog.Error(WebSocketMessage.ERROR_WHILE_SENDING_SOCKET
                        + WebSocketMessage.SEPARATOR + lEx.Message);
         }
         OnError(new WebSocketError(WebSocketMessage.ERROR_WHILE_SENDING_SOCKET));
         StopIt();
         throw new WebSocketException(WebSocketMessage.ERROR_WHILE_SENDING_SOCKET
                                      + WebSocketMessage.SEPARATOR + lEx.Message);
     }
     catch (Exception lEx)
     {
         if (mLog.IsErrorEnabled)
         {
             mLog.Error(WebSocketMessage.ERROR_WHILE_SENDING_SOCKET
                        + WebSocketMessage.SEPARATOR + lEx.Message);
         }
         OnError(new WebSocketError((WebSocketMessage.ERROR_WHILE_SENDING_SOCKET)));
         StopIt();
         throw new WebSocketException(WebSocketMessage.ERROR_WHILE_SENDING_SOCKET
                                      + WebSocketMessage.SEPARATOR + lEx.Message);
     }
 }
Exemplo n.º 3
0
        private void ProcessHybi()
        {
            WebSocketFrameType lFrameType;
            IWebSocketPacket   lPacket;

            while (mIsRunning)
            {
                try
                {
                    lPacket = WebSocketProtocolAbstraction.protocolToRawPacket(mNetStream);
                    Console.WriteLine(lPacket.GetString());
                    lFrameType = (lPacket != null ? lPacket.FrameType : WebSocketFrameType.INVALID);

                    if (lFrameType.Equals(null))
                    {
                        if (mLog.IsErrorEnabled)
                        {
                            mLog.Error(WebSocketMessage.NULL_FRAME_TYPE);
                        }
                        mIsRunning = false;
                        mCLose     = WebSocketCloseReason.BROKEN;
                        OnError(new WebSocketError(WebSocketMessage.NULL_FRAME_TYPE, mCLose));
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.INVALID))
                    {
                        if (mLog.IsErrorEnabled)
                        {
                            mLog.Error(WebSocketMessage.INVALID_HYBI_FRAME);
                        }
                        mIsRunning = false;
                        mCLose     = WebSocketCloseReason.BROKEN;
                        OnError(new WebSocketError(WebSocketMessage.INVALID_HYBI_FRAME, mCLose));
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.CLOSE))
                    {
                        if (mLog.IsInfoEnabled)
                        {
                            mLog.Info(WebSocketMessage.CLOSE_FRAME_TYPE);
                        }
                        mIsRunning = false;
                        mCLose     = WebSocketCloseReason.CLIENT;

                        StopIt();
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.PONG))
                    {
                        OnRecivePong();
                        if (WebSocketStateOfStatus.isWritable(mStatus))
                        {
                            if (mLog.IsInfoEnabled)
                            {
                                mLog.Info(WebSocketMessage.PING_PACKET_SENDING);
                            }
                            Ping();
                            OnSendPing();
                        }
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.BINARY))
                    {
                        if (mLog.IsInfoEnabled)
                        {
                            mLog.Info(WebSocketMessage.BINARY_PACKET_RECEIVED);
                        }
                        //****TODO****
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.TEXT))
                    {
                        if (mLog.IsInfoEnabled)
                        {
                            mLog.Info(WebSocketMessage.TEXT_PACKET_RECEIVED);
                        }
                        OnReciveTextPacket(this, lPacket);
                    }
                    else if (lFrameType.Equals(WebSocketFrameType.FRAGMENT))
                    {
                        if (mLog.IsInfoEnabled)
                        {
                            mLog.Info(WebSocketMessage.FRAGMENT_PACKET_RECEIVED);
                        }
                        //****TODO****
                    }
                }
                catch (Exception lEx)
                {
                    mIsRunning = false;
                    if (mStatus.Equals(WebSocketStatus.CLOSED))
                    {
                        mCLose = WebSocketCloseReason.CLIENT;
                    }
                    else
                    {
                        mCLose = WebSocketCloseReason.BROKEN;
                        OnError(new WebSocketError(WebSocketMessage.ERROR_HYBI_PROCESSOR, mCLose));
                        if (mLog.IsErrorEnabled)
                        {
                            mLog.Error(WebSocketMessage.ERROR_HYBI_PROCESSOR
                                       + WebSocketMessage.SEPARATOR + lEx.Message);
                        }
                    }
                }
            }
        }