/// <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)); } } } }); }
public void Test() { ResettingBitBuffer buffer = new ResettingBitBuffer(BufferableCount * 8); for (int run = 0; run < RunCount; run++) { using (buffer) { IBufferable[] bufferables = new IBufferable[BufferableCount]; object[] values = new object[bufferables.Length]; for (int i = 0; i < bufferables.Length; i++) { bufferables[i] = Bufferables[Random.Next(Bufferables.Length)]; values[i] = bufferables[i].GenerateValue(); bufferables[i].Write(buffer, values[i]); } for (int i = 0; i < bufferables.Length; i++) { Assert.AreEqual(bufferables[i].Read(buffer), values[i], $"In the {run + 1}. on the {i + 1}. iteration"); } } } }