public override void Update() { if (Listener?.Pending() == true) { PlayersJoining.Add(new SCONClient(Listener.AcceptSocket(), this)); } #region Player Filtration for (var i = 0; i < PlayersToAdd.Count; i++) { var playerToAdd = PlayersToAdd[i]; Clients.Add(playerToAdd); PlayersToAdd.Remove(playerToAdd); } for (var i = 0; i < PlayersToRemove.Count; i++) { var playerToRemove = PlayersToRemove[i]; Clients.Remove(playerToRemove); PlayersJoining.Remove(playerToRemove); PlayersToRemove.Remove(playerToRemove); playerToRemove.Dispose(); } #endregion Player Filtration #region Player Updating // Update actual players for (var i = Clients.Count - 1; i >= 0; i--) { Clients[i]?.Update(); } // Update joining players for (var i = PlayersJoining.Count - 1; i >= 0; i--) { PlayersJoining[i]?.Update(); } #endregion Player Updating }
private void ListenerCycle() { try { while (true) // Listener.Stop() will stop it. { var client = new P3DPlayer(Listener.AcceptSocket(), this); client.Ready += OnClientReady; client.Disconnected += OnClientLeave; client.StartListening(); lock (JoiningClients) JoiningClients.Add(client); } } catch (Exception e) when(e is SocketException) { } }
protected override void run() { while (running) { try { Socket socket = Listener.AcceptSocket(); if (socket.Connected) { WebRequests.WaitOne(); new Thread(() => { WebServerRequest request = new WebServerRequest(socket, this); openSockets.Add(request); request.start(); }).Start(); } } catch { } } }
public override void Update() { if (Listener?.Pending() == true) { PlayersJoining.Add(new PokeDPlayer(Listener.AcceptSocket(), this)); } #region Player Filtration for (var i = 0; i < PlayersToAdd.Count; i++) { var playerToAdd = PlayersToAdd[i]; Clients.Add(playerToAdd); PlayersToAdd.Remove(playerToAdd); if (playerToAdd.ID != 0) { /* * var mapData = Maps.GetFileAsync("0.0.tmx").Result.ReadAllTextAsync().Result; * //var mapData = Maps.GetFileAsync(playerToAdd.LevelFile).Result.ReadAllTextAsync().Result; * #region Hash * * Map map; * using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(mapData))) * map = Map.Load(stream); * * var tileSetHashesh = map.TileSets.Select(tileSet => new FileHash() * { * Name = tileSet.Source.Replace(".tsx", ""), * Hash = TileSets.GetFileAsync(tileSet.Source).Result.MD5Hash() * }); * * var imageHashesh = map.TileSets.Select(tileSet => * new FileHash() * { * Name = tileSet.Source.Replace(".tsx", ""), * Hash = TileSets.GetFileAsync(tileSet.Source.Replace(".tsx", ".png")).Result.MD5Hash() * }); #endregion Hash * * * playerToAdd.SendPacket(new MapPacket() * { * MapData = mapData, * TileSetHashes = tileSetHashesh.ToArray(), * ImageHashes = imageHashesh.ToArray() * }); */ } } for (var i = 0; i < PlayersToRemove.Count; i++) { var playerToRemove = PlayersToRemove[i]; Clients.Remove(playerToRemove); PlayersJoining.Remove(playerToRemove); PlayersToRemove.Remove(playerToRemove); playerToRemove.Dispose(); } #endregion Player Filtration #region Player Updating // Update actual players for (var i = Clients.Count - 1; i >= 0; i--) { Clients[i]?.Update(); } // Update joining players for (var i = PlayersJoining.Count - 1; i >= 0; i--) { PlayersJoining[i]?.Update(); } #endregion Player Updating if (UpdateWatch.ElapsedMilliseconds > 5000) { for (var i = Clients.Count - 1; i >= 0; i--) { Clients[i]?.SendPacket(new PingPacket()); } UpdateWatch.Reset(); UpdateWatch.Start(); } }