/// <summary>
        /// Creates a new instance of a <see cref="WebSocketNetworkListener"/>.
        /// </summary>
        /// <param name="port">The port of server.</param>
        /// <param name="listenerType">The listener type of client connection.</param>
        /// <param name="clientConnectedHandler">The client connected handler callback implementation.</param>
        /// <param name="messageReceivedHandler">The callback of message received handler implementation.</param>
        /// <param name="clientDisconnectedHandler">The callback of client disconnected handler implementation.</param>
        /// <param name="maxMessageBuffer">The number max of connected clients, the default value is 1000.</param>
        public WebSocketNetworkListener(NetworkListenerType listenerType, ushort port, ClientConnectedHandler clientConnectedHandler,
                                        MessageReceivedHandler messageReceivedHandler,
                                        ClientDisconnectedHandler clientDisconnectedHandler,
                                        ushort maxMessageBuffer) : base(port, clientConnectedHandler, messageReceivedHandler, clientDisconnectedHandler, maxMessageBuffer)
        {
            try
            {
                //var host = Dns.GetHostEntry(Dns.GetHostName());
                //var hostIp = host.AddressList.FirstOrDefault(c => c.AddressFamily == AddressFamily.InterNetwork).ToString();

                _listenerType = listenerType;
                _httpListener = new HttpListener();
                _httpListener.Prefixes.Add($"http://localhost:{port}/");
                _httpListener.Prefixes.Add($"http://127.0.0.1:{port}/");
                //_httpListener.Prefixes.Add($"http://{hostIp}:{port}/");
                _httpListener.Start();

                Console.WriteLine($"Starting the WebSocket network listener on port: {port}.");

                WaitForConnections();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}.");
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="HttpClientContextImp"/> class.
        /// </summary>
        /// <param name="secured">true if the connection is secured (SSL/TLS)</param>
        /// <param name="remoteEndPoint">client that connected.</param>
        /// <param name="requestHandler">delegate handling incoming requests.</param>
        /// <param name="disconnectHandler">delegate being called when a client disconnectes</param>
        /// <param name="stream">Stream used for communication</param>
        /// <exception cref="SocketException">If beginreceive fails</exception>
        /// <param name="writer">delegate used to write log entries</param>
        /// <see cref="RequestReceivedHandler"/>
        /// <see cref="ClientDisconnectedHandler"/>
        public HttpClientContextImp(bool secured, IPEndPoint remoteEndPoint, 
                                    RequestReceivedHandler requestHandler,
                                   ClientDisconnectedHandler disconnectHandler,
                                   Stream stream, ILogWriter writer)
        {
            Check.Require(requestHandler, "requestHandler");
            Check.Require(remoteEndPoint, "remoteEndPoint");
            Check.Require(remoteEndPoint.Address, "remoteEndPoint.Address");
            Check.Require(stream, "stream");
            if (!stream.CanWrite || !stream.CanRead)
                throw new ArgumentException("Stream must be writeable and readable.");

            _remoteEndPoint = remoteEndPoint;
            _log = writer ?? NullLogWriter.Instance;
            _parser = new HttpRequestParser(OnRequestCompleted, null);
            _secured = secured;
            _requestHandler = requestHandler;
            _disconnectHandler = disconnectHandler;
            _stream = stream;
            try
            {
                _stream.BeginRead(_buffer, 0, BUFFER_SIZE, OnReceive, null);
            }
            catch (IOException err)
            {
                _log.Write(this, LogPrio.Debug, err.ToString());
                _stream = null;
                _disconnectHandler(this, SocketError.ConnectionAborted);
            }
        }
示例#3
0
 /// <summary>
 /// Creates a new instance of a <see cref="NetworkListener"/>.
 /// </summary>
 /// <param name="port">The port of server.</param>
 /// <param name="clientConnectedHandler">The client connected handler callback implementation.</param>
 /// <param name="messageReceivedHandler">The callback of message received handler implementation.</param>
 /// <param name="clientDisconnectedHandler">The callback of client disconnected handler implementation.</param>
 /// <param name="maxMessageBuffer">The number max of connected clients, the default value is 1000.</param>
 public NetworkListener(ushort port, ClientConnectedHandler clientConnectedHandler,
                        MessageReceivedHandler messageReceivedHandler,
                        ClientDisconnectedHandler clientDisconnectedHandler,
                        ushort maxMessageBuffer)
 {
     _clientConnectedHandler    = clientConnectedHandler;
     _messageReceivedHandler    = messageReceivedHandler;
     _clientDisconnectedHandler = clientDisconnectedHandler;
     _maxMessageBuffer          = maxMessageBuffer;
 }
示例#4
0
        /// <summary>
        /// Called when a client has been disconnected from the server.
        /// </summary>
        /// <param name="client">The client that has been disconnected.</param>
        /// <param name="forced">Indicates if the client disconnection was forced</param>
        protected virtual void OnClientDisconnected(IClient client, bool forced)
        {
            Info(client, Resources.ClientDisconnected);

            ClientDisconnectedHandler handler = ClientDisconnected;

            if (handler != null)
            {
                handler(client, forced);
            }
        }
示例#5
0
        /// <summary>
        /// Called when a client has been disconnected from the server.
        /// </summary>
        /// <param name="client">The client that has been disconnected.</param>
        /// <param name="forced">Indicates if the client disconnection was forced</param>
        protected virtual void OnClientDisconnected(IClient client, bool forced)
        {
            this.Info(client, Cell_Core.ClientDisconnected);
            ClientDisconnectedHandler clientDisconnected = this.ClientDisconnected;

            if (clientDisconnected == null)
            {
                return;
            }
            clientDisconnected(client, forced);
        }
示例#6
0
 /// <summary>
 /// Creates a new instance of a <see cref="NetworkListener"/>.
 /// </summary>
 /// <param name="port">The port of server.</param>
 /// <param name="clientConnectedHandler">The client connected handler callback implementation.</param>
 public NetworkListener(MessageReceivedHandler messageReceivedHandler, ClientDisconnectedHandler clientDisconnectedHandler)
 {
     try
     {
         _messageReceivedHandler    = messageReceivedHandler;
         _clientDisconnectedHandler = clientDisconnectedHandler;
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Error: {ex.Message}.");
     }
 }
示例#7
0
        /// <summary>
        /// Called when a client has been disconnected from the server.
        /// </summary>
        /// <param name="client">The client that has been disconnected.</param>
        /// <param name="forced">Indicates if the client disconnection was forced</param>
        protected virtual void OnClientDisconnected(ClientBase client, bool forced)
        {
            client.Cleanup();
            Info(client, Resources.Disconnected);

            ClientDisconnectedHandler handler = ClientDisconnected;

            if (handler != null)
            {
                handler(client, forced);
            }
        }
示例#8
0
        /// <summary>
        /// 断开处理
        /// </summary>
        /// <param name="client"></param>
        /// <param name="forced"></param>
        protected virtual void OnClientDisconnected(IClient client, bool forced)
        {
            ClientDisconnectedHandler handler = ClientDisconnected;

            if (handler != null)
            {
                handler(client, forced);
            }

            //if (DisConnected != null && client.TcpSocket != null)
            //{
            //    DisConnected(this, new DataEventArgs<string, int>(string.Empty, client.TcpSocket.Handle.ToInt32()));
            //}

            client.Dispose();
        }
示例#9
0
        /// <summary>
        /// Creates a new instance of a <see cref="UDPClient"/>.
        /// </summary>
        /// <param name="id">The identifier number of connected client.</param>
        /// <param name="socketClient">The tcp client from connected client.</param>
        /// <param name="messageReceivedHandler">The callback of message received handler implementation.</param>
        /// <param name="clientDisconnectedHandler">The callback of client disconnected handler implementation.</param>
        /// <param name="maxMessageBuffer">The max length of message buffer.</param>
        public UDPClient(ushort id, UdpNetworkListener socketClient, EndPoint remoteEndPoint, MessageReceivedHandler messageReceivedHandler, ClientDisconnectedHandler clientDisconnectedHandler, ushort maxMessageBuffer)
        {
            try
            {
                _udpListener    = socketClient;
                _remoteEndPoint = remoteEndPoint;

                _messageReceivedHandler    = messageReceivedHandler;
                _clientDisconnectedHandler = clientDisconnectedHandler;

                Id = id;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}.");
            }
        }
        /// <summary>
        /// Creates a new instance of a <see cref="TcpNetworkListener"/>.
        /// </summary>
        /// <param name="port">The port of server.</param>
        /// <param name="clientConnectedHandler">The client connected handler callback implementation.</param>
        /// <param name="messageReceivedHandler">The callback of message received handler implementation.</param>
        /// <param name="clientDisconnectedHandler">The callback of client disconnected handler implementation.</param>
        /// <param name="maxMessageBuffer">The number max of connected clients, the default value is 1000.</param>
        public TcpNetworkListener(ushort port, ClientConnectedHandler clientConnectedHandler,
                                  MessageReceivedHandler messageReceivedHandler,
                                  ClientDisconnectedHandler clientDisconnectedHandler,
                                  ushort maxMessageBuffer) : base(port, clientConnectedHandler, messageReceivedHandler, clientDisconnectedHandler, maxMessageBuffer)
        {
            try
            {
                _listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                _listener.Bind(new IPEndPoint(IPAddress.Any, port));
                _listener.Listen(100);
                _listener.BeginAccept(new AsyncCallback(OnAccept), null);

                Console.WriteLine($"Starting the TCP network listener on port: {port}.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}.");
            }
        }
示例#11
0
文件: Client.cs 项目: Quget/Q-Server
        //Lets clossssssssse
        public void Close()
        {
            if (isClosed)
            {
                //Eutils.WriteLine("Error socket is already closed:{0}", Eutils.MESSSAGE_TYPE.ERROR, ID);
                return;
            }
            ClientDisconnectedHandler disEvent = disconnected;

            if (disEvent != null)
            {
                disEvent(this);
            }
            if (socket != null)
            {
                socket.Close();//Close!
            }

            isClosed = true;
        }
示例#12
0
        /// <summary>
        /// Creates a new instance of a <see cref="TcpNetworkListener"/>.
        /// </summary>
        /// <param name="port">The port of server.</param>
        /// <param name="clientConnectedHandler">The client connected handler callback implementation.</param>
        /// <param name="messageReceivedHandler">The callback of message received handler implementation.</param>
        /// <param name="clientDisconnectedHandler">The callback of client disconnected handler implementation.</param>
        /// <param name="maxMessageBuffer">The number max of connected clients, the default value is 1000.</param>
        public UdpNetworkListener(ushort port, ClientConnectedHandler clientConnectedHandler,
                                  MessageReceivedHandler messageReceivedHandler,
                                  ClientDisconnectedHandler clientDisconnectedHandler,
                                  ushort maxMessageBuffer) : base(port, clientConnectedHandler, messageReceivedHandler, clientDisconnectedHandler, maxMessageBuffer)
        {
            try
            {
                _kingUdpClients = new Dictionary <EndPoint, UDPClient>();
                _listener       = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                _listener.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), port));

                EndPoint endPointFrom = new IPEndPoint(IPAddress.Any, 0);

                byte[] array = new byte[_maxMessageBuffer];
                _listener.BeginReceiveFrom(array, 0, _maxMessageBuffer, SocketFlags.None, ref endPointFrom, new AsyncCallback(ReceiveDataCallback), array);

                Console.WriteLine($"Starting the UDP network listener on port: {port}.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}.");
            }
        }
示例#13
0
        /// <summary>
        /// Creates a new instance of a <see cref="Client"/>.
        /// </summary>
        /// <param name="id">The identifier number of connected client.</param>
        /// <param name="socketClient">The tcp client from connected client.</param>
        /// <param name="messageReceivedHandler">The callback of message received handler implementation.</param>
        /// <param name="clientDisconnectedHandler">The callback of client disconnected handler implementation.</param>
        /// <param name="maxMessageBuffer">The max length of message buffer.</param>
        public Client(ushort id, Socket socketClient, MessageReceivedHandler messageReceivedHandler, ClientDisconnectedHandler clientDisconnectedHandler, ushort maxMessageBuffer)
        {
            try
            {
                _socketClient              = socketClient;
                _messageReceivedHandler    = messageReceivedHandler;
                _clientDisconnectedHandler = clientDisconnectedHandler;

                _socketClient.ReceiveBufferSize = maxMessageBuffer;
                _socketClient.SendBufferSize    = maxMessageBuffer;
                _buffer = new byte[maxMessageBuffer];
                _stream = new NetworkStream(_socketClient);

                Id = id;
                //IpAddress = _socketClient.Client.RemoteEndPoint.ToString();

                _stream.BeginRead(_buffer, 0, _socketClient.ReceiveBufferSize, ReceiveDataCallback, null);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}.");
            }
        }
示例#14
0
        /// <summary>
        /// Creates a new instance of a <see cref="WSClient"/>.
        /// </summary>
        /// <param name="id">The identifier number of connected client.</param>
        /// <param name="id">The identifier number of connected client.</param>
        /// <param name="listenerType">The listener type of client connection.</param>
        /// <param name="ws">The websocket connection.</param>
        /// <param name="listenerContext">The websocket http listener context.</param>
        /// <param name="messageReceivedHandler">The callback of message received handler implementation.</param>
        /// <param name="clientDisconnectedHandler">The callback of client disconnected handler implementation.</param>
        /// <param name="maxMessageBuffer">The max length of message buffer.</param>
        public WSClient(ushort id, string remoteEndPoint, NetworkListenerType listenerType, WebSocket ws, HttpListenerContext listenerContext, MessageReceivedHandler messageReceivedHandler, ClientDisconnectedHandler clientDisconnectedHandler, ushort maxMessageBuffer)
        {
            try
            {
                IpAddress = remoteEndPoint;

                _webSocket       = ws;
                _listenerContext = listenerContext;
                _listenerType    = listenerType;

                _buff = new ArraySegment <byte>(new byte[maxMessageBuffer]);

                _messageReceivedHandler    = messageReceivedHandler;
                _clientDisconnectedHandler = clientDisconnectedHandler;

                Id = id;

                WaitConnection();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}.");
            }
        }
示例#15
0
 public void OnClientTimeout(ClientDisconnectedHandler handler)
 {
     _clientDisconnectedHandler = handler;
 }
示例#16
0
 public void OnClientTimeout(ClientDisconnectedHandler handler)
 {
     _clientDisconnectedHandler = handler;
 }
示例#17
0
 /// <summary>
 /// Creates a new instance of a <see cref="TcpNetworkListener"/>.
 /// </summary>
 /// <param name="messageReceivedHandler">The callback of message received handler implementation.</param>
 /// <param name="clientDisconnectedHandler">The callback of client disconnected handler implementation.</param>
 public TcpNetworkListener(MessageReceivedHandler messageReceivedHandler, ClientDisconnectedHandler clientDisconnectedHandler)
     : base(messageReceivedHandler, clientDisconnectedHandler)
 {
 }
        public static NetworkListener CreateForType(NetworkListenerType listenerType, MessageReceivedHandler messageReceivedHandler, ClientDisconnectedHandler clientDisconnectedHandler)
        {
            if (listenerType == NetworkListenerType.TCP)
            {
                return(new TcpNetworkListener(messageReceivedHandler, clientDisconnectedHandler));
            }

            return(new UdpNetworkListener(messageReceivedHandler, clientDisconnectedHandler));
        }