public void Test() { byte[] encryptionKey = new byte[16]; Random.NextBytes(encryptionKey); Console.WriteLine("Starting server"); DoubleServerHandler serverHandler = new DoubleServerHandler(); DoubleServer server = new DoubleServer(serverHandler, 1, 1, Port); serverHandler.Server = server; Console.WriteLine("Starting client"); DoubleClientHandler clientHandler = new DoubleClientHandler(); DoubleClient client = new DoubleClient(clientHandler, encryptionKey, encryptionKey, Ip, Port); clientHandler.Client = client; client.Start(); lock (client) { clientHandler.MaySend = true; Monitor.Pulse(client); Console.WriteLine("Main thread waiting"); Monitor.Wait(client); } Console.WriteLine("Closing client"); client.Close(); Console.WriteLine("Closing server"); server.Close(); }
/// <summary> /// Deinitializes the networking, kicking all connected clients and stopping the server. /// </summary> public static void Stop() { Assert.IsNotNull(_server, "The NetworkServer is not initialized."); UdpPayload = null; _tickingThread?.Stop(); _tickingThread = null; NetworkUtils.GlobalBaseTimestamp = -1; Array.Clear(TcpHandlers, 0, TcpHandlers.Length); _resettingByteBuffer = null; _clients = null; _handler = null; _server.Close(); _server = null; }
/// <summary> /// Initializes the networking and starts accepting connections. /// </summary> public static void Start() { Assert.IsNull(_server, "The NetworkServer is already initialized."); NetworkUtils.GlobalBaseTimestamp = DoubleProtocol.TimeMillis; _resettingByteBuffer = new ResettingBitBuffer(DoubleProtocol.TcpBufferArraySize); _clients = new HashSet <NetworkServerClient>(); _handler = new DoubleServerHandler(); _server = new DoubleServer(_handler, NetworkUtils.MaxBotCount, (NetworkUtils.MaxBotCount * 3 + 1) / 2, NetworkUtils.Port); _tickingThread = new TickingThread(NetworkUtils.UdpSendFrequency, () => { lock (UdpPayloadLock) { if (_udpPayload != null && _udpPayload.Length != 0) { foreach (NetworkServerClient serverClient in _clients) { _server.SendUdp(serverClient.DoubleClient, buffer => buffer.Write(UdpPayload)); } } } }); }