/// <summary> /// Detach the given client from the server management /// </summary> /// <param name="clientSocket">the client to detach</param> /// <returns></returns> public bool DetachClient(IocpTcpSocket clientSocket) { lock (m_listLock) { return(m_socketList.Remove(clientSocket)); } }
/// <summary> /// Default constructor /// </summary> /// <param name="packetType">packet type</param> /// <param name="packet">packet</param> /// <param name="offset">offset</param> /// <param name="size">size of packet in byte</param> /// <param name="iocpTcpClient">client socket</param> /// <param name="dataPacket">data packet for send</param> public PacketTransporter(PacketType packetType, Packet packet, int offset, int size, IocpTcpSocket iocpTcpClient, Packet dataPacket = null) { m_packetType = packetType; m_packet = packet; m_offset = offset; m_size = size; m_iocpTcpClient = iocpTcpClient; m_dataPacket = dataPacket; }
/// <summary> /// Accept callback function /// </summary> /// <param name="result">result</param> private static void onAccept(IAsyncResult result) { IocpTcpServer server = result.AsyncState as IocpTcpServer; TcpClient client = null; try { if (server.m_listener != null) { client = server.m_listener.EndAcceptTcpClient(result); } } catch (Exception ex) { Console.WriteLine(ex.Message + " >" + ex.StackTrace); if (client != null) { try { client.Client.Shutdown(SocketShutdown.Both); //client.Client.Disconnect(true); } catch (Exception e) { Console.WriteLine(e.Message + " >" + e.StackTrace); } client.Close(); client = null; } } try { if (server.m_listener != null) { server.m_listener.BeginAcceptTcpClient(new AsyncCallback(IocpTcpServer.onAccept), server); } } catch (Exception ex) { Console.WriteLine(ex.Message + " >" + ex.StackTrace); if (client != null) { client.Close(); } server.StopServer(); return; } if (client != null) { IocpTcpSocket socket = new IocpTcpSocket(client, server); lock (server.m_listLock) { if (server.MaxSocketCount != SocketCount.Infinite && server.m_socketList.Count > server.MaxSocketCount) { socket.Disconnect(); return; } } if (server.CallBackObj == null) { socket.Disconnect(); return; } if (!server.Acceptor.OnAccept(server, socket.IPInfo)) { socket.Disconnect(); } else { INetworkSocketCallback socketCallbackObj = server.Acceptor.GetSocketCallback(); socket.CallBackObj = socketCallbackObj; socket.Start(); lock (server.m_listLock) { server.m_socketList.Add(socket); } server.OnServerAccepted(server, socket); } } }
/// <summary> /// Detach the given client from the server management /// </summary> /// <param name="clientSocket">the client to detach</param> /// <returns></returns> public bool DetachClient(IocpTcpSocket clientSocket) { lock (m_listLock) { return m_socketList.Remove(clientSocket); } }
/// <summary> /// Accept callback function /// </summary> /// <param name="result">result</param> private static void onAccept(IAsyncResult result) { IocpTcpServer server = result.AsyncState as IocpTcpServer; TcpClient client=null; try { client = server.m_listener.EndAcceptTcpClient(result); } catch (Exception ex) { Console.WriteLine(ex.Message + " >" + ex.StackTrace); if (client != null) { try { client.Client.Shutdown(SocketShutdown.Both); //client.Client.Disconnect(true); } catch (Exception e) { Console.WriteLine(e.Message + " >" + e.StackTrace); } client.Close(); client = null; } } try { server.m_listener.BeginAcceptTcpClient(new AsyncCallback(IocpTcpServer.onAccept), server); } catch (Exception ex) { Console.WriteLine(ex.Message + " >" + ex.StackTrace); if (client != null) client.Close(); server.StopServer(); return; } if (client != null) { IocpTcpSocket socket = new IocpTcpSocket(client, server); INetworkSocketCallback socketCallbackObj = server.CallBackObj.OnAccept(server, socket.IPInfo); if (socketCallbackObj == null) { socket.Disconnect(); } else { socket.CallBackObj=socketCallbackObj; socket.Start(); lock (server.m_listLock) { server.m_socketList.Add(socket); } } } }
/// <summary> /// Default constructor /// </summary> /// <param name="packetType">packet type</param> /// <param name="packet">packet</param> /// <param name="offset">offset</param> /// <param name="size">size of packet in byte</param> /// <param name="iocpTcpClient">client socket</param> /// <param name="dataPacket">data packet for send</param> public PacketTransporter(PacketType packetType, Packet packet, int offset, int size, IocpTcpSocket iocpTcpClient, Packet dataPacket = null) { m_packetType = packetType; m_packet = packet; m_offset = offset; m_size = size; m_iocpTcpClient = iocpTcpClient; m_dataPacket = dataPacket; m_callBackObj = iocpTcpClient.m_callBackObj; }