public void Connect(IAccount addAccount, IAccount connectAccount) { var clock = new Clock(); var playerFactory = new PlayerFactory(); var playerDatabase = new PlayerDiskDatabase <IPlayer, IPlayerFactory <IPlayer> >(testDatabasePath, false); var logger = new ConsoleLogger(clock); var room = new RoomUdpSocket <IPlayer, IPlayerFactory <IPlayer> >(0, "Test Room #0", clock, playerFactory, playerDatabase, logger); var client = new QueuedUdpSocket(logger); room.Start(); client.Start(); room.AddPlayer(addAccount, out Token connectToken); var remoteEndPoint = new IPEndPoint(IPAddress.Loopback, room.LocalEndPoint.Port); client.Send(new ConnectUdpRequest(connectAccount.ID, connectToken, remoteEndPoint)); Datagram datagram; while (!client.TryDequeueNext(out datagram)) { } Assert.AreEqual((byte)RoomDatagramType.Connect, datagram.Type); var response = new ConnectUdpResponse(datagram); Assert.AreEqual((byte)ConnectUdpResponse.ResultType.Success, response.result); room.Close(); client.Close(); }
protected void OnConnectRequest(Datagram datagram) { IUdpRequestResponse response; try { var request = new ConnectUdpRequest(datagram); if (!players.TryGetValue(request.id, out TPlayer player)) { return; } if (player.ConnecToken != request.connectToken) { response = new ConnectUdpResponse(ConnectUdpResponse.ResultType.IncorrectToken); Send(response, datagram.ipEndPoint); if (logger.Log(LogType.Debug)) { logger.Debug($"Failed to connect room UDP socket player, incorrect token. (id: {request.id}, remoteEndPoint: {datagram.ipEndPoint}, roomID: {id})"); } } player.RemoteEndPoint = datagram.ipEndPoint; player.LastActionMS = clock.MS; response = new ConnectUdpResponse(ConnectUdpResponse.ResultType.Success); Send(response, datagram.ipEndPoint); if (logger.Log(LogType.Info)) { logger.Info($"Connected a new room UDP socket player. (id: {request.id}, remoteEndPoint: {datagram.ipEndPoint}, roomID: {id})"); } } catch { response = new ConnectUdpResponse(ConnectUdpResponse.ResultType.BadRequest); Send(response, datagram.ipEndPoint); if (logger.Log(LogType.Debug)) { logger.Debug($"Failed to connect room UDP socket player, bad request. (remoteEndPoint: {datagram.ipEndPoint}, roomID: {id})"); } } }