Exemple #1
0
 /// <summary>
 /// WebSocket结束
 /// </summary>
 protected override void webSocketEnd()
 {
     Interlocked.Increment(ref identity);
     webSocket.socket webSocket = webSocketReceiver.WebSocket;
     webSocketReceiver.WebSocket = null;
     pub.Dispose(ref SslStream);
     pub.Dispose(ref networkStream);
     if (Socket != null)
     {
         fastCSharp.threading.disposeTimer.Default.addSocketClose(Socket);
     }
     webSocket.Close();
     if (Ipv6.Ip == null)
     {
         if ((Socket = server.SocketEnd(Ipv4)) != null)
         {
             start();
             return;
         }
     }
     else
     {
         if ((Socket = server.SocketEnd(ref Ipv6)) != null)
         {
             start();
             return;
         }
         Ipv6.Null();
     }
     typePool <sslStream> .PushNotNull(this);
 }
Exemple #2
0
 public void Receive(webSocket.socket webSocket)
 {
     this.WebSocket          = webSocket;
     webSocket.SslStream     = socket.SslStream;
     webSocket.Parser.Buffer = buffer;
     receiveEndIndex         = 0;
     receive();
 }
Exemple #3
0
 /// <summary>
 /// 开始接收WebSocket数据
 /// </summary>
 /// <param name="webSocket"></param>
 protected override void receiveWebSocket(webSocket.socket webSocket)
 {
     if (webSocketReceiver == null)
     {
         webSocketReceiver = new webSocketIdentityReceiver(this);
     }
     webSocketReceiver.Receive(webSocket);
 }
Exemple #4
0
 /// <summary>
 /// 发送消息
 /// </summary>
 /// <param name="webSocket"></param>
 internal unsafe void Send(webSocket.socket webSocket)
 {
     byte[] buffer = fastCSharp.memoryPool.StreamBuffers.Get();
     webSocket.socket.message message = default(webSocket.socket.message);
     try
     {
         fixed(byte *bufferFixed = buffer)
         {
             using (unmanagedStream stream = new unmanagedStream(bufferFixed, buffer.Length))
             {
                 sender sender = new sender {
                     Buffer = buffer, BufferFixed = bufferFixed, Stream = stream
                 };
                 do
                 {
                     if (webSocket == this.WebSocket && webSocket.SocketIdentity == socket.identity)
                     {
                         if (webSocket.GetMessage(ref message))
                         {
                             sender.Send(ref message);
                             if ((stream.Length << 1) > buffer.Length)
                             {
                                 byte[] data = sender.GetData();
                                 Monitor.Enter(sendLock);
                                 try
                                 {
                                     webSocket.SslStream.Write(data, 0, stream.Length);
                                     ++socket.timeoutIdentity;
                                 }
                                 finally { Monitor.Exit(sendLock); }
                                 stream.UnsafeSetLength(0);
                             }
                             else if (webSocket.MessageCount == 0)
                             {
                                 Thread.Sleep(0);
                             }
                         }
                         else
                         {
                             if (stream.Length != 0)
                             {
                                 byte[] data = sender.GetData();
                                 Monitor.Enter(sendLock);
                                 try
                                 {
                                     webSocket.SslStream.Write(data, 0, stream.Length);
                                     ++socket.timeoutIdentity;
                                 }
                                 finally { Monitor.Exit(sendLock); }
                             }
                             return;
                         }
                     }
                     else
                     {
                         break;
                     }
                 }while (true);
             }
         }
     }
     catch { }
     finally { fastCSharp.memoryPool.StreamBuffers.PushNotNull(buffer); }
     webSocket.Client.shutdown();
 }
Exemple #5
0
 /// <summary>
 /// WebSocket发送消息
 /// </summary>
 /// <param name="webSocket"></param>
 internal override void WebSocketSend(webSocket.socket webSocket)
 {
     webSocketReceiver.Send(webSocket);
 }