private bool HandleHandshake(Peer peer, byte[] data) { var request = PacketReader.ReadKeyCheckRequest(data); // TODO: keys for every player ulong playerID = (ulong)_blowfish.Decrypt(request.CheckId); // Wrong Blowfish key, or the client is already connected if (request.PlayerID != playerID || _peers.ContainsKey(request.PlayerID)) { return(false); } _playerClient[request.PlayerID] = (uint)_playersConnected; _playerManager.GetPeerInfo(request.PlayerID).ClientId = _playerClient[request.PlayerID]; _playerManager.GetPeerInfo(request.PlayerID).IsStartedClient = true; _playersConnected++; Debug.WriteLine("Connected player No " + request.PlayerID); _peers[request.PlayerID] = peer; bool result = true; // inform players about their player numbers foreach (var player in _peers.Keys.ToArray()) { var response = new KeyCheckResponse(player, _playerClient[player]); // TODO: fix casting result = result && SendPacket((int)request.PlayerID, response.GetBytes(), Channel.CHL_HANDSHAKE); } // only if all packets were sent successfully return true return(result); }
private bool HandleHandshake(Peer peer, byte[] data) { var request = PacketReader.ReadKeyCheckRequest(data); // TODO: keys for every player int userId = (int)_blowfish.Decrypt(request.CheckId); if (request.UserId != userId) { // wrong blowfish key return(false); } // TODO: removed code that return if player connected, check if there is no problem if (!_peers.ContainsKey(userId)) { _playerNum[userId] = _curPlayerNum; _curPlayerNum++; } _peers[userId] = peer; bool result = true; // inform players about their player numbers foreach (var user in _peers.Keys.ToArray()) { var response = new KeyCheckResponse(user, _playerNum[user]); result = result && SendPacket((int)request.UserId, response.GetBytes(), Channel.CHL_HANDSHAKE); } // only if all packets were sent successfully return true return(result); }
public override bool HandlePacket(Peer peer, byte[] data) { var keyCheck = new KeyCheckRequest(data); var userId = _game.Blowfish.Decrypt(keyCheck.checkId); if (userId != keyCheck.userId) { return(false); } var playerNo = 0; foreach (var p in _playerManager.GetPlayers()) { var player = p.Item2; if (player.UserId == userId) { if (player.Peer != null) { if (!player.IsDisconnected) { _logger.LogCoreWarning("Ignoring new player " + userId + ", already connected!"); return(false); } } //TODO: add at least port or smth p.Item1 = peer.Address.port; player.Peer = peer; player.PlayerNo = playerNo; var response = new KeyCheckResponse(keyCheck.userId, playerNo); _game.PacketHandlerManager.broadcastPacket(response, Channel.CHL_HANDSHAKE); foreach (var p2 in _playerManager.GetPlayers()) { if (p2.Item2.Peer != null && p2.Item2.UserId != player.UserId) { var response2 = new KeyCheckResponse(p2.Item2.UserId, p2.Item2.PlayerNo); _game.PacketHandlerManager.sendPacket(player.Peer, response2, Channel.CHL_HANDSHAKE); } } return(true); } ++playerNo; } return(false); }
// TODO: check if this is broadcast or not public void NotifyKeyCheck(long userId, int playerNo) { var response = new KeyCheckResponse(userId, playerNo); _packetHandlerManager.SendPacket((int)userId, response, Channel.CHL_HANDSHAKE); }