public void DisconnectClient(string ip)
        {
            if (!IsRunning)
            {
                OnDisconnectClientCompletedEvent?.Invoke(ip, SocketServerResult.ServerNotRunning);

                return;
            }

            SocketServerResult sRes = SocketServerResult.None;

            try
            {
                IClientSocket client = this[ip];

                client.Close();

                _clientDic.Remove(ip);

                sRes = SocketServerResult.Success;
            }
            catch
            {
                sRes = SocketServerResult.Exception;
            }
            finally
            {
                OnDisconnectClientCompletedEvent?.Invoke(ip, sRes);
            }
        }
        public void Close()
        {
            if (!IsRunning)
            {
                OnCloseCompletedEvent?.Invoke(SocketServerResult.ServerNotRunning);

                return;
            }

            SocketServerResult sRes = SocketServerResult.None;

            DisconnectAllClient();

            try
            {
                _isRunning = false;

                _socket.Close();

                _socket = null;

                sRes = SocketServerResult.Success;
            }
            catch
            {
                sRes = SocketServerResult.Exception;
            }
            finally
            {
                OnCloseCompletedEvent?.Invoke(sRes);
            }
        }
        private void OnReceiveCallback(IAsyncResult result)
        {
            if (!IsRunning)
            {
                OnReceiveCompletedEvent?.Invoke(string.Empty, null, SocketServerResult.ServerNotRunning);

                return;
            }

            string ip = string.Empty;

            SocketServerResult sRes = SocketServerResult.None;

            byte[] data = null;

            int length = 0;

            try
            {
                ip = result.AsyncState as string;

                IClientSocket client = this[ip];

                length = client.Socket.EndReceive(result);

                if (length > 0)
                {
                    data = new byte[length];

                    Array.Copy(client.CacheBuffer, data, length);

                    sRes = SocketServerResult.Success;
                }
                else
                {
                    DisconnectClient(ip);
                }
            }
            catch
            {
                sRes = SocketServerResult.Exception;
            }
            finally
            {
                if (length > 0)
                {
                    OnReceiveCompletedEvent?.Invoke(ip, data, sRes);

                    Receive(ip);
                }
            }
        }
        private void OnAcceptCallback(IAsyncResult result)
        {
            string ip = string.Empty;

            SocketServerResult sRes = SocketServerResult.None;

            try
            {
                Socket socket = result.AsyncState as Socket;

                Socket clientSocket = socket.EndAccept(result);

                ip = (clientSocket.RemoteEndPoint as IPEndPoint)?.Address?.ToString();

                if (!string.IsNullOrEmpty(ip))
                {
                    IClientSocket cSocket = new ClientSocket(clientSocket);

                    this[ip] = cSocket;

                    Receive(ip);

                    sRes = SocketServerResult.Success;
                }
                else
                {
                    throw new Exception("<Ming> ## Uni Excption ## Cls:TcpSocketServer Func:OnAcceptCallback Info:Accept ip is null");
                }
            }
            catch
            {
                sRes = SocketServerResult.Exception;
            }
            finally
            {
                OnAcceptCompletedEvent?.Invoke(ip, sRes);

                Accept();
            }
        }
        private void OnSendCallback(IAsyncResult result)
        {
            SocketServerResult sRes = SocketServerResult.None;

            string ip = string.Empty;

            try
            {
                ip = result.AsyncState as string;

                this[ip].Socket.EndSend(result);

                sRes = SocketServerResult.Success;
            }
            catch
            {
                sRes = SocketServerResult.Exception;
            }
            finally
            {
                OnSendCompletedEvent?.Invoke(ip, sRes);
            }
        }
Example #6
0
 private static void Server_OnAcceptCompletedEvent(string ip, SocketServerResult res)
 {
     Console.WriteLine(string.Format("Accept client done ! ip:{0} result:{1}", ip, res));
 }
Example #7
0
 private static void Server_OnCloseCompletedEvent(SocketServerResult res)
 {
     Console.WriteLine(string.Format("Close server done ! result:{0}", res));
 }
Example #8
0
 private static void Server_OnReceiveCompletedEvent(string ip, byte[] data, SocketServerResult res)
 {
     Console.WriteLine(string.Format("Receive data done ! ip:{0} result:{1} data:{2}", ip, res, Encoding.UTF8.GetString(data)));
 }
Example #9
0
 private static void Server_OnSendCompletedEvent(string ip, SocketServerResult res)
 {
     Console.WriteLine(string.Format("Send data done ! ip:{0} result:{1}", ip, res));
 }