Exemple #1
0
        public void OnDataReceived(IAsyncResult asyn)
        {
            PacketSocket psoc = (PacketSocket)asyn.AsyncState;

            try
            {
                if (!psoc.currentSocket.Connected)
                {
                    return;
                }
                IPEndPoint ep = ((IPEndPoint)psoc.currentSocket.RemoteEndPoint);

                int iRx = psoc.currentSocket.EndReceive(asyn);
                if (iRx < 1)
                {
                    return;
                }

                CmdReqBase request = new CmdReqBase();
                string     sLine   = "";
                while (true)
                {
                    int r = ReadLine(ref sLine, psoc.currentSocket);
                    if (r == 0)
                    {
                        return;
                    }
                    if (r <= 0)
                    {
                        throw new Exception("Read data error!");
                    }
                    if (sLine.Trim() == "DONE")
                    {
                        break;
                    }
                    ParseLine(sLine, request);
                }
                _Log.Write(LogType.Debug, "Receive Command Success! Command Data as follow:------", true);
                PackageLog.WritePkgLog((object)request, _Log);
                _Log.Write(LogType.Debug, "---------------Command data end!-------------", true);

                // Treate Command
                CmdRespBase response = new CmdRespBase();
                if (OnClientDataReceived != null)
                {
                    OnClientDataReceived(request, response);
                }
                // Response Command
                sLine = "ErrorCode=" + response.ErrorCode;
                SendLine(sLine, psoc.currentSocket);
                for (int i = 0; i < response.GetParamCount(); i++)
                {
                    sLine = response.GetParamName(i) + "=" + response.GetParamValue(i);
                    SendLine(sLine, psoc.currentSocket);
                }
                sLine = "DONE";
                SendLine(sLine, psoc.currentSocket);

                _Log.Write(LogType.Debug, "Send Command Response Success! Command Data as follow:-----", true);
                PackageLog.WritePkgLog(response, _Log);
                _Log.Write(LogType.Debug, "---------------Command data end!-------------", true);

                // Continue the waiting for data on the Socket
                // WaitForData(psoc, psoc.SocketID); //not need to wait for next request!once connect and disconnecct
                psoc.currentSocket.Close();
                _socketList.Delete(psoc.SocketID);
            }
            catch (ObjectDisposedException)
            {
                //System.Diagnostics.Debugger.Log(0, "1", "\r\nOnDataReceived: Socket has been closed\r\n");
                _Log.Write(LogType.Error, "\r\nOnDataReceived: Socket has been closed\r\n", true);
            }
            catch (SocketException se)
            {
                if (se.ErrorCode == 10054) // Error code for Connection reset by peer
                {
                    string logmsg = "\r\nClient " + " Disconnected" + "\r\n";
                    _Log.Write(LogType.Error, logmsg, true);

                    // Remove the reference to the worker socket of the closed client
                    // so that this object will get garbage collected
                    psoc.currentSocket.Close();
                    _socketList.Delete(psoc.SocketID);
                }
                else
                {
                    _Log.Write(se);
                }
            }
            catch (Exception exx)
            {
                _Log.Write(exx);
            }
        }
Exemple #2
0
        public CmdRespBase SendCommand(CmdReqBase Request)
        {
            try
            {
                if (!this.IsConnected)
                {
                    if (!Connect())
                    {
                        return(null);
                    }
                }

                #region Send
                try
                {
                    _Log.Write(LogType.Debug, "----------- Send Command Begin...-----------\r\n", true);
                    //send command
                    SendLine("Command=" + Request.Command);
                    //send parameter
                    for (int i = 0; i < Request.GetParamCount(); i++)
                    {
                        SendLine(Request.GetParamName(i) + "=" + Request.GetParamValue(i));
                    }
                    //send DONE
                    SendLine("DONE");

                    // log
                    PackageLog.WritePkgLog(Request, _Log);
                    _Log.Write(LogType.Debug, "------------ Send Command Success!----------\r\n", true);
                }
                catch (Exception ex)
                {
                    PackageLog.WritePkgLog(Request, _Log);
                    _Log.Write(LogType.Error, "---------- Send Command Failure!------------\r\n", true);
                    throw ex;
                }
                #endregion

                #region Receive
                try
                {
                    this.ResetCache();

                    _Log.Write(LogType.Debug, "----------- Receive Response Begin...-------\r\n", true);
                    CmdRespBase response;
                    if (CommandToken.IsNewPatient(Request.Command))
                    {
                        response = new CmdRespNewPatient();
                    }
                    else
                    {
                        response = new CmdRespBase();
                    }

                    string sLine = "";
                    int    r     = ReadLine(ref sLine);
                    while (r > 0)
                    {
                        if (sLine == "DONE")
                        {
                            break;
                        }
                        else
                        {
                            ParseLine(sLine, response);
                        }

                        r = ReadLine(ref sLine);
                    }

                    if (r > 0)
                    {
                        PackageLog.WritePkgLog(response, _Log);
                        _Log.Write(LogType.Debug, "----------- Receive Response Success!-------\r\n", true);
                        return(response);
                    }
                    else
                    {
                        _Log.Write(LogType.Error, "Recive response Failure\r\nReceived byte as follow:\r\n" + this.GetCatchHexString(), true);
                        return(null);
                    }
                }
                catch (Exception ex)
                {
                    _Log.Write(LogType.Error, "Recive response Failure\r\nReceived byte as follow:\r\n" + this.GetCatchHexString(), true);
                    throw ex;
                }
                #endregion
            }
            catch (ObjectDisposedException)
            {
                _Log.Write(LogType.Error, "OnDataReceived: Socket has been closed\r\n");
                return(null);
            }
            catch (SocketException se)
            {
                if (se.ErrorCode == 10054) // Error code for Connection reset by peer
                {
                    string logmsg = "Server " + _ServerIP + ":" + _ServerPort.ToString() + " Disconnected" + "\r\n";
                    _Log.Write(LogType.Error, logmsg, true);
                    return(null);
                }
                else
                {
                    _Log.Write(se);
                    return(null);
                }
            }
            catch (Exception ex)
            {
                _Log.Write(ex);
                return(null);
            }
        }