예제 #1
0
        public void Handle(AbsRequestHandler handler)
        {
            try
            {
                byte[] buffer = null;
                IEnumerable<byte> receiveBuffer = new byte[0];
                do
                {
                    buffer = new byte[RECEIVE_LENGTH];//length:chrome:514, firefox:533, IE11:289
                    int receiveLength = handler.ClientSocket.Receive(buffer);
                    if(buffer.Length > receiveLength)
                    {
                        Array.Resize(ref buffer, receiveLength);
                    }
                    receiveBuffer = receiveBuffer.Concat(buffer);
                }
                while (handler.ClientSocket.Available > 0);
                byte[] data = receiveBuffer.ToArray();

                byte[] response = null;
                if (!ResponseHandShake(data, out response))
                {
                    handler.ServiceState = new State_Exit();
                    return;
                }
                int sendLength = handler.ClientSocket.Send(response);
                Logger.WriteLog("Response HandShake data and length:" + sendLength.ToString());
                handler.ServiceState = new State_AsyncCommunicate();
            }
            catch(SocketException sckEx)
            {
                Logger.WriteLog("[State_HandShake]Socket Error:" + sckEx.Message);
                handler.ServiceState = new State_Exit();
            }
        }
예제 #2
0
        private static int SEND_TIMEOUT    = 2000; // 2 second

        public void Handle(AbsRequestHandler handler)
        {
            try
            {
                byte[]             buffer        = null;
                IEnumerable <byte> receiveBuffer = new byte[0];
                do
                {
                    buffer = new byte[RECEIVE_LENGTH];//length:chrome:514, firefox:533, IE11:289
                    int receiveLength = handler.ClientSocket.Receive(buffer);
                    if (buffer.Length > receiveLength)
                    {
                        Array.Resize(ref buffer, receiveLength);
                    }
                    receiveBuffer = receiveBuffer.Concat(buffer);
                }while (handler.ClientSocket.Available > 0);
                byte[] data = receiveBuffer.ToArray();

                byte[] response = null;
                if (!ResponseHandShake(data, out response))
                {
                    handler.ServiceState = new State_Exit();
                    return;
                }
                int sendLength = handler.ClientSocket.Send(response);
                Logger.WriteLog("Response HandShake data and length:" + sendLength.ToString());
                handler.ServiceState = new State_AsyncCommunicate();
            }
            catch (SocketException sckEx)
            {
                Logger.WriteLog("[State_HandShake]Socket Error:" + sckEx.Message);
                handler.ServiceState = new State_Exit();
            }
        }
 public void Handle(AbsRequestHandler handler)
 {
     try
     {
         this._clientHandler = handler;
         _keepAlive = true;
         receiveData = new byte[0];
         //this.AsyncReceive(handler);
         handler.ReceiveData = new byte[20];
         do
         {
             lock (_clientHandler)
             {
                 _sequenceNO += 1;
             }
             StateObj obj = new StateObj { SequnceNO = _sequenceNO, ClientSocket = handler.ClientSocket };
             handler.ClientSocket.BeginReceive(obj.Receive_buffer, 0, obj.Receive_buffer.Length, SocketFlags.None, ReceiveCallback, obj);
             _receiveDone.WaitOne();
         }
         while (_keepAlive);
     }
     catch (SocketException sckEx)
     {
         Logger.WriteLog("[SocketException]" + sckEx.Message);
     }
     catch (Exception ex)
     {
         Logger.WriteLog("[Exception]" + ex.Message);
     }
     finally
     {
         handler.ServiceState = new State_Exit();
     }
 }
예제 #4
0
 public void Handle(AbsRequestHandler handler)
 {
     try
     {
         this._clientHandler = handler;
         _keepAlive          = true;
         receiveData         = new byte[0];
         //this.AsyncReceive(handler);
         handler.ReceiveData = new byte[20];
         do
         {
             lock (_clientHandler)
             {
                 _sequenceNO += 1;
             }
             StateObj obj = new StateObj {
                 SequnceNO = _sequenceNO, ClientSocket = handler.ClientSocket
             };
             handler.ClientSocket.BeginReceive(obj.Receive_buffer, 0, obj.Receive_buffer.Length, SocketFlags.None, ReceiveCallback, obj);
             _receiveDone.WaitOne();
         }while (_keepAlive);
     }
     catch (SocketException sckEx)
     {
         Logger.WriteLog("[SocketException]" + sckEx.Message);
     }
     catch (Exception ex)
     {
         Logger.WriteLog("[Exception]" + ex.Message);
     }
     finally
     {
         handler.ServiceState = new State_Exit();
     }
 }
예제 #5
0
 public void Handle(AbsRequestHandler handler)
 {
     Logger.WriteLog("Client " + handler.ClientNo + " Exit ...");
     //exit state
     handler.CancelAsync();
 }
예제 #6
0
 public void Handle(AbsRequestHandler handler)
 {
     Logger.WriteLog("Client " + handler.ClientNo + " Exit ...");
     //exit state
     handler.CancelAsync();
 }