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 bool Initialize(Address address, string baseKey) { _logger.LogCoreInfo("Loading Config."); Config = new Config("Settings/GameInfo.json"); _server = new Host(); _server.Create(address, 32, 32, 0, 0); var key = System.Convert.FromBase64String(baseKey); if (key.Length <= 0) { return(false); } Blowfish = new BlowFish(key); PacketHandlerManager = new PacketHandlerManager(_logger, Blowfish, _server, _playerManager); Map = new SummonersRift(this); PacketNotifier = new PacketNotifier(this, _playerManager, _networkIdManager); ApiFunctionManager.SetGame(this); IsRunning = false; foreach (var p in Config.Players) { _playerManager.AddPlayer(p); } return(true); }
public void Initialize(Address address, string blowfishKey, Config config) { _logger.LogCoreInfo("Loading Config."); Config = config; _chatCommandManager.LoadCommands(); _server = new Host(); _server.Create(address, 32, 32, 0, 0); var key = Convert.FromBase64String(blowfishKey); if (key.Length <= 0) { throw new InvalidKeyException("Invalid blowfish key supplied"); } Blowfish = new BlowFish(key); PacketHandlerManager = new PacketHandlerManager(_logger, Blowfish, _server, _playerManager); RegisterMap((byte)Config.GameConfig.Map); PacketNotifier = new PacketNotifier(this, _playerManager, _networkIdManager); ApiFunctionManager.SetGame(this); IsRunning = false; foreach (var p in Config.Players) { _playerManager.AddPlayer(p); } _logger.LogCoreInfo("Game is ready."); }
public void Initialize(Address address, string blowfishKey, Config config) { _logger.LogCoreInfo("Loading Config."); Config = config; _gameScriptTimers = new List <GameScriptTimer>(); _chatCommandManager.LoadCommands(); _server = new Host(); _server.Create(address, 32, 32, 0, 0); var key = Convert.FromBase64String(blowfishKey); if (key.Length <= 0) { throw new InvalidKeyException("Invalid blowfish key supplied"); } Blowfish = new BlowFish(key); PacketHandlerManager = new PacketHandlerManager(_logger, Blowfish, _server, _playerManager, _packetHandlerProvider); ObjectManager = new ObjectManager(this); Map = new Map(this); PacketNotifier = new PacketNotifier(this, _playerManager, _networkIdManager); ApiFunctionManager.SetGame(this); ApiEventManager.SetGame(this); IsRunning = false; disconnectedPlayers = 0; _logger.LogCoreInfo("Loading C# Scripts"); LoadScripts(); Map.Init(); foreach (var p in Config.Players) { _playerManager.AddPlayer(p); } _pauseTimer = new Timer { AutoReset = true, Enabled = false, Interval = 1000 }; _pauseTimer.Elapsed += (sender, args) => PauseTimeLeft--; PauseTimeLeft = 30 * 60; // 30 minutes _logger.LogCoreInfo("Game is ready."); }
public bool Initialize(Address address, string baseKey) { Logger.LogCoreInfo("Loading Config."); Config = new Config("Settings/GameInfo.json"); ItemManager = ItemManager.LoadItems(this); ChatboxManager = new ChatboxManager(this); _server = new Host(); _server.Create(address, 32, 32, 0, 0); var key = System.Convert.FromBase64String(baseKey); if (key.Length <= 0) { return(false); } Blowfish = new BlowFish(key); PacketHandlerManager = new PacketHandlerManager(this); _map = new SummonersRift(this); PacketNotifier = new PacketNotifier(this); ApiFunctionManager.SetGame(this); var id = 1; foreach (var p in Config.Players) { var player = new ClientInfo(p.Value.Rank, ((p.Value.Team.ToLower() == "blue") ? TeamId.TEAM_BLUE : TeamId.TEAM_PURPLE), p.Value.Ribbon, p.Value.Icon); player.SetName(p.Value.Name); player.SetSkinNo(p.Value.Skin); player.UserId = id; // same as StartClient.bat id++; player.SetSummoners(StrToId(p.Value.Summoner1), StrToId(p.Value.Summoner2)); var c = new Champion(this, p.Value.Champion, GetNewNetID(), (uint)player.UserId); var pos = c.getRespawnPosition(); c.setPosition(pos.Item1, pos.Item2); c.setTeam((p.Value.Team.ToLower() == "blue") ? TeamId.TEAM_BLUE : TeamId.TEAM_PURPLE); c.LevelUp(); player.SetChampion(c); var pair = new Pair <uint, ClientInfo>(); pair.Item2 = player; _players.Add(pair); } return(true); }
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); } } }