/// <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, AsyncTcpSocket tcpClient, int dataType = -1, Packet dataPacket = null) { m_packetType = packetType; m_packet = packet; m_offset = offset; m_size = size; m_TcpClient = tcpClient; m_dataPacket = dataPacket; m_DataType = dataType; m_callBackObj = tcpClient.m_callBackObj; }
private void onAccept(IAsyncResult result) { AsyncTcpServer server = result.AsyncState as AsyncTcpServer; TcpClient client = null; try { client = server.m_listener.EndAcceptTcpClient(result); } catch (Exception ex) { Console.WriteLine(ex.Message + " >" + ex.StackTrace); if (client != null) { client.Close(); } server.StopServer(); return; } try { server.m_listener.BeginAcceptTcpClient(new AsyncCallback(onAccept), server); } catch (Exception ex) { Console.WriteLine(ex.Message + " >" + ex.StackTrace); if (client != null) { client.Close(); } server.StopServer(); return; } AsyncTcpSocket socket = new AsyncTcpSocket(client, server); INetworkSocketCallback socketCallbackObj = server.m_callBackObj.OnAccept(server, socket.GetIPInfo()); if (socketCallbackObj == null) { socket.Disconnect(); } else { socket.SetSocketCallback(socketCallbackObj); socket.Start(); lock (server.m_listLock) { server.m_socketList.Add(socket); } } }
/// <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> /// 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; }
/// <summary> /// Set socket callback interface /// </summary> /// <param name="callBackObj">callback object</param> public void SetSocketCallback(INetworkSocketCallback callBackObj) { m_callBackObj = callBackObj; }