public void NetLoop() { var enetEvent = new Event(); _lastMapDurationWatch = new Stopwatch(); _lastMapDurationWatch.Start(); using (PreciseTimer.SetResolution(1)) { while (!Program.IsSetToExit) { while (_server.Service(0, out enetEvent) > 0) { switch (enetEvent.Type) { case EventType.Connect: // Set some defaults enetEvent.Peer.Mtu = PEER_MTU; enetEvent.Data = 0; break; case EventType.Receive: PacketHandlerManager.handlePacket(enetEvent.Peer, enetEvent.Packet, (Channel)enetEvent.ChannelID); // Clean up the packet now that we're done using it. enetEvent.Packet.Dispose(); break; case EventType.Disconnect: HandleDisconnect(enetEvent.Peer); break; } } if (IsPaused) { _lastMapDurationWatch.Stop(); _pauseTimer.Enabled = true; if (PauseTimeLeft <= 0 && !_autoResumeCheck) { PacketHandlerManager.GetHandler(PacketCmd.PKT_UnpauseGame, Channel.CHL_C2S) .HandlePacket(null, new byte[0]); _autoResumeCheck = true; } continue; } if (_lastMapDurationWatch.Elapsed.TotalMilliseconds + 1.0 > REFRESH_RATE) { var sinceLastMapTime = _lastMapDurationWatch.Elapsed.TotalMilliseconds; _lastMapDurationWatch.Restart(); if (IsRunning) { Map.Update((float)sinceLastMapTime); _gameScriptTimers.ForEach(gsTimer => gsTimer.Update((float)sinceLastMapTime)); _gameScriptTimers.RemoveAll(gsTimer => gsTimer.IsDead()); } } Thread.Sleep(1); } } }
public void NetLoop() { var watch = new Stopwatch(); var enetEvent = new Event(); while (true) { while (_server.Service(0, out enetEvent) > 0) { switch (enetEvent.Type) { case EventType.Connect: //Logging->writeLine("A new client connected: %i.%i.%i.%i:%i", event.peer->address.host & 0xFF, (event.peer->address.host >> 8) & 0xFF, (event.peer->address.host >> 16) & 0xFF, (event.peer->address.host >> 24) & 0xFF, event.peer->address.port); /* Set some defaults */ enetEvent.Peer.Mtu = PEER_MTU; enetEvent.Data = 0; break; case EventType.Receive: if (!PacketHandlerManager.handlePacket(enetEvent.Peer, enetEvent.Packet, (Channel)enetEvent.ChannelID)) { //enet_peer_disconnect(event.peer, 0); } /* Clean up the packet now that we're done using it. */ enetEvent.Packet.Dispose(); break; case EventType.Disconnect: HandleDisconnect(enetEvent.Peer); break; } } if (IsRunning) { Map.Update(_timeElapsed); } watch.Stop(); _timeElapsed = watch.ElapsedMilliseconds; watch.Restart(); var timeToWait = REFRESH_RATE - _timeElapsed; if (timeToWait < 0) { timeToWait = 0; } Thread.Sleep((int)timeToWait); } }
public void NetLoop() { var enetEvent = new Event(); var lastMapDurationWatch = new Stopwatch(); lastMapDurationWatch.Start(); using (PreciseTimer.SetResolution(1)) { while (!Program.IsSetToExit) { while (_server.Service(0, out enetEvent) > 0) { switch (enetEvent.Type) { case EventType.Connect: // Set some defaults enetEvent.Peer.Mtu = PEER_MTU; enetEvent.Data = 0; break; case EventType.Receive: if (!PacketHandlerManager.handlePacket(enetEvent.Peer, enetEvent.Packet, (Channel)enetEvent.ChannelID)) { //enet_peer_disconnect(event.peer, 0); } // Clean up the packet now that we're done using it. enetEvent.Packet.Dispose(); break; case EventType.Disconnect: HandleDisconnect(enetEvent.Peer); break; } } if (lastMapDurationWatch.Elapsed.TotalMilliseconds + 1.0 > REFRESH_RATE) { double sinceLastMapTime = lastMapDurationWatch.Elapsed.TotalMilliseconds; lastMapDurationWatch.Restart(); if (IsRunning) { Map.Update((float)sinceLastMapTime); } } Thread.Sleep(1); } } }