/// <summary> /// Initiates a loop for a server that wishes to accept new clients. /// </summary> /// <param name="serverCallback"></param> public static void ServerAwaitingClientLoop(NetworkAction serverCallback) { Console.WriteLine("Server initialized, waiting for first client."); TcpListener tcpListener = new TcpListener(IPAddress.Any, DEFAULT_PORT); try { tcpListener.Start(); ServerListenerState sls = new ServerListenerState(tcpListener, serverCallback); tcpListener.BeginAcceptSocket(AcceptNewClient, sls); } catch (Exception e) { Console.WriteLine(e.Message); } }
/// <summary> /// OS calls this function upon client contact with the server. Calls the server's callback function then begins the client loop again. /// </summary> /// <param name="ar"></param> private static void AcceptNewClient(IAsyncResult ar) { Console.WriteLine("A new player has joined the server."); ServerListenerState sls = (ServerListenerState)ar.AsyncState; TcpListener tcpListener = sls.ServerListener; Socket socket = tcpListener.EndAcceptSocket(ar); socket.NoDelay = true; SocketState ss = new SocketState(socket, 0); ss.ClientCallback = sls.ServerCallback; ss.theSocket = socket; ss.ClientCallback(ss); sls.ServerListener.BeginAcceptSocket(AcceptNewClient, sls); }