コード例 #1
0
 public static void KillConnection()
 {
     ReceiverThread.Abort();
     DataBaseConnectionMaintainer.Abort();
     socketclient.CloseAndDispose();
     stream.CloseAndDispose();
 }
コード例 #2
0
 public static void KillConnection()
 {
     IsShutdownStarted            = true;
     ReceiverThread               = null;
     DataBaseConnectionMaintainer = null;
     socketClient.CloseAndDispose();
     stream.CloseAndDispose();
 }
コード例 #3
0
        private static void Recv(object socketclientpara)
        {
            Socket        baseSocket        = socketclientpara as Socket;
            NetworkStream stream            = new NetworkStream(baseSocket);
            string        remoteEP          = baseSocket.RemoteEndPoint.ToString();
            bool          _connectionOpened = false;

            while (true)
            {
                try
                {
                    string requestString = PublicTools.DecodeMessage(stream);
                    LW.D("Recived Data: " + requestString);
                    if (requestString.Length <= 5)
                    {
                        baseSocket.CloseAndDispose();
                        break;
                    }

                    string _MessageId = requestString.Substring(0, 5);
                    requestString = requestString.Substring(5);

                    if (requestString == "openConnection")
                    {
                        LW.D("C: Recieve an OpenConnection Request, from " + remoteEP);
                        byte[] arrSendMsg = PublicTools.EncodeMessage(_MessageId, remoteEP);
                        stream.Write(arrSendMsg, 0, arrSendMsg.Length);
                        stream.Flush();
                        LW.D("C: Replied an OpenConnection Request, to " + remoteEP);
                        _connectionOpened = true;
                    }
                    else if (_connectionOpened)
                    {
                        if (requestString == "HeartBeat")
                        {
                            LW.D("B: Recieve a HearBeat, from " + remoteEP);
                            DateTime rtime      = DateTime.Now;
                            byte[]   arrSendMsg = PublicTools.EncodeMessage(_MessageId, rtime.ToNormalString());
                            stream.Write(arrSendMsg, 0, arrSendMsg.Length);
                            stream.Flush();
                            LW.D("C: Replied a HearBeat, to " + remoteEP);
                        }
                        else if (requestString.ToParsedObject(out DBInternal request))
                        {
                            QueryStrings[remoteEP] = requestString;
                            LW.D("Q: " + remoteEP + " :: " + requestString);
                            //It takes Time.....
                            string returnStr  = DatabaseCore.ProcessRequest(request);
                            byte[] arrSendMsg = PublicTools.EncodeMessage(_MessageId, returnStr);
                            stream.Write(arrSendMsg, 0, arrSendMsg.Length);
                            stream.Flush();
                            LW.D("P: " + remoteEP + " :: " + returnStr);
                        }
                        else
                        {
                            //Invalid Connection......
                            LW.E("E: " + remoteEP + " :: JSON Parse Exception!");
                            baseSocket.CloseAndDispose();
                            QueryStrings.Remove(remoteEP);
                            break;
                        }
                    }
                    else
                    {
                        LW.E("Connection to " + remoteEP + " is not marked as 'Opened'");
                        baseSocket.CloseAndDispose();
                        stream.CloseAndDispose();
                        QueryStrings.Remove(remoteEP);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    LW.E("Client " + remoteEP + " drops the connection. " + "\r\n" + ex.Message + "\r\n" + ex.StackTrace + "\r\n");
                    QueryStrings.Remove(remoteEP);
                    stream.CloseAndDispose();
                    baseSocket.CloseAndDispose();
                    break;
                }
            }
            QueryStrings.Remove(remoteEP);
            LW.E("Client Connection Socket to " + remoteEP + " gonna Stop!");
            Thread.CurrentThread.Abort();
            return;
        }