private static void HandleGetAnotherPlayerStateMessage(RestDataRequestMessage restDataRequestMessage, GetAnotherPlayerStateMessage messageContent, ref RestResponse response, RestRequestMessage request) { response.FunctionResult = new RestDataFunctionResult(new GetAnotherPlayerStateMessageResult(AnotherPlayerState.NotFound, 0)); response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleUpdateShownBadgeIdMessage(RestDataRequestMessage message, UpdateShownBadgeIdMessage messagecontent, ref RestResponse response, RestRequestMessage request) { var user = _context.FindUserBySessionCredentials(message.SessionCredentials); if (user == default) { return; } user.PlayerData.ShownBadgeId = messagecontent.ShownBadgeId; response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleRegisterCustomGameMessage(RegisterCustomGameMessage msg, ref RestResponse response, RestDataRequestMessage message) { var user = this._context.Users.Find(x => x.Id.SessionKey == message.SessionCredentials.SessionKey); user.Server = new GameServerEntry(CustomBattleId.NewGuid(), msg.ServerName, this.HttpContext.Connection.RemoteIpAddress.ToString(), msg.Port, "EU", msg.GameModule, msg.GameType, msg.Map, 0, msg.MaxPlayerCount, true, false); Console.WriteLine($"New Server: {this.HttpContext.Connection.RemoteIpAddress.ToString()} {msg.Port}"); response.FunctionResult = new RestDataFunctionResult(new RegisterCustomGameResult(true)); response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleQuitFromCustomGameMessage(RestDataRequestMessage message, QuitFromCustomGameMessage messagecontent, ref RestResponse response, RestRequestMessage request) { var user = this._context.FindUserBySessionCredentials(message.SessionCredentials); if (user != default) { var hoster = _context.FindServerHosterBy(user.ConnectedServer); if (hoster != default) { hoster.HostedServer.PlayerCount--; } } response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleGetPlayerBadgesMessage(RestDataRequestMessage message, GetPlayerBadgesMessage messageContent, ref RestResponse response, RestRequestMessage request) { var user = _context.FindUserBySessionCredentials(message.SessionCredentials); if (user == default) { return; } response.FunctionResult = new RestDataFunctionResult(new GetPlayerBadgesMessageResult(new[] { user.CanHost ? "badge_taleworlds_primary_dev" : "" })); response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleGetServerStatusMessage(RestDataRequestMessage message, GetServerStatusMessage messagecontent, ref RestResponse response, RestRequestMessage request) { var user = _context.FindUserBySessionCredentials(message.SessionCredentials); if (user == default) { return; } response.EnqueueMessage(new RestDataResponseMessage(new ServerStatusMessage(GetServerStatusForUser(user)))); response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleEndHostingCustomGameMessage(RestDataRequestMessage message, EndHostingCustomGameMessage messageContent, ref RestResponse response, RestRequestMessage request) { var user = _context.FindUserBySessionCredentials(message.SessionCredentials); if (user != default) { user.HostedServer = null; } response.FunctionResult = new RestDataFunctionResult(new EndHostingCustomGameResult()); response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleUpdateCharacterMessage(RestDataRequestMessage message, UpdateCharacterMessage messagecontent, ref RestResponse response, RestRequestMessage request) { var user = _context.FindUserBySessionCredentials(message.SessionCredentials); if (user == default) { return; } user.PlayerData.BodyProperties = messagecontent.BodyProperties; user.PlayerData.IsFemale = messagecontent.IsFemale; response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleEndHostingCustomGameMessage(EndHostingCustomGameMessage msg, ref RestResponse response, RestDataRequestMessage message) { try { var user = _context.Users.Find(x => message.SessionCredentials.SessionKey == x.Id.SessionKey); if (user != null) { user.Server = null; } } catch (Exception e) { Console.WriteLine(e); throw; } response.FunctionResult = new RestDataFunctionResult(new EndHostingCustomGameResult()); response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleResponseCustomGameClientConnectionMessage(RestDataRequestMessage message, ResponseCustomGameClientConnectionMessage messageContent, ref RestResponse response, RestRequestMessage request) { var server = _context.Users.Find(x => x.Id.SessionKey == message.SessionCredentials.SessionKey) .HostedServer; foreach (var joindata in messageContent.PlayerJoinData) { var users = _context.Users.FindAll(usr => joindata.PlayerId.ConvertToPeerId() == usr.Id.PeerId && usr.HostedServer == null); switch (joindata.CustomGameJoinResponse) { case CustomGameJoinResponse.Success: users.ForEach(u => { u.QueuedMessages.Enqueue(new RestDataResponseMessage( JoinCustomGameResultMessage.CreateSuccess(new JoinGameData( new GameServerProperties(server.entry.ServerName, server.entry.Address, server.entry.Port, server.Region, server.entry.GameModule, server.entry.GameType, server.entry.Map, "", "", server.entry.MaxPlayerCount, server.entry.IsOfficial), joindata.PeerIndex, joindata.SessionKey)))); server.PlayerCount++; }); break; default: users.ForEach(u => u.QueuedMessages.Enqueue( new RestDataResponseMessage( JoinCustomGameResultMessage.CreateFailed(joindata.CustomGameJoinResponse)))); break; } } response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleRegisterCustomGameMessage(RestDataRequestMessage restDataRequestMessage, RegisterCustomGameMessage messageContent, ref RestResponse response, RestRequestMessage request) { var user = _context.FindUserBySessionCredentials(restDataRequestMessage.SessionCredentials); if (user == default) { return; } user.HostedServer = new CommunityServerEntry(new GameServerEntry(CustomBattleId.NewGuid(), messageContent.ServerName, HttpContext.Connection.RemoteIpAddress.ToString(), messageContent.Port, "EU", messageContent.GameModule, messageContent.GameType, messageContent.Map, 1, messageContent.MaxPlayerCount, true, !(messageContent.GamePassword == null || messageContent.GamePassword.IsEmpty()))); Console.WriteLine( $"New Server: {HttpContext.Connection.RemoteIpAddress} {messageContent.Port}"); user.ConnectedServer = user.HostedServer.entry.Id; response.FunctionResult = new RestDataFunctionResult(new RegisterCustomGameResult(true)); response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleLogin(RestDataRequestMessage message, InitializeSession messageContent, ref RestResponse response, RestRequestMessage request) { var session = new SessionCredentials(messageContent.PeerId, SessionKey.NewGuid()); var playerdata = new PlayerData(); playerdata.FillWithNewPlayer(messageContent.PlayerId, new[] { "FreeForAll", "Captain", "Siege", "Duel", "TeamDeathMatch", "FreeForAll" }); playerdata.LastPlayerName = messageContent.PlayerName; playerdata.LastGameTypes = new[] { "Captain" }; var user = new User { Id = session, QueuedMessages = new Queue <RestResponseMessage>(), PlayerData = playerdata }; if (messageContent.PlayerId.IsValidSteamId()) { if (_context.SteamIDS.Contains(messageContent.PlayerId.Id2)) { user.CanHost = true; } } var userStatus = GetServerStatusForUser(user); _context.Users.Add(user); var initializeSessionResponse = new InitializeSessionResponse(playerdata, userStatus ); response.FunctionResult = new RestDataFunctionResult(new LoginResult(session.PeerId, session.SessionKey, initializeSessionResponse)); response.UserCertificate = session.SessionKey.ToByteArray(); response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleRequestCustomGameServerListMessage(RestDataRequestMessage message, RequestCustomGameServerListMessage messageContent, ref RestResponse response, RestRequestMessage request) { var serverList = new AvailableCustomGames(); foreach (var server in _context.Users.Select(u => u.HostedServer)) { if (server != null) { serverList.CustomGameServerInfos .Add(new GameServerEntry(server.entry.Id, server.entry.ServerName, server.entry.Address, server.entry.Port, server.entry.Region, server.entry.GameModule, server.entry.GameType, server.entry.Map , server.PlayerCount, server.entry.MaxPlayerCount, server.entry.IsOfficial, server.entry .PasswordProtected)); // serverlist.CustomGameServerInfos.Add(new GameServerEntry()); } } var resp = new CustomGameServerListResponse(serverList); response.FunctionResult = new RestDataFunctionResult(resp); response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleResponseCustomGameClientConnectionMessage(ResponseCustomGameClientConnectionMessage msg, ref RestResponse response, RestDataRequestMessage message) { var Server = _context.Users.Find(x => x.Id.SessionKey == message.SessionCredentials.SessionKey).Server; foreach (var joindata in msg.PlayerJoinData) { var users = this._context.Users.FindAll(usr => joindata.PlayerId.ConvertToPeerId() == usr.Id.PeerId && usr.Server == null); switch (msg.Response) { case CustomGameJoinResponse.Success: users.ForEach(u => u.QueuedMessages.Enqueue(new RestDataResponseMessage(JoinCustomGameResultMessage.CreateSuccess(new JoinGameData(new GameServerProperties(Server.ServerName, Server.Address, Server.Port, Server.Region, Server.GameModule, Server.GameType, Server.Map, "", "", Server.MaxPlayerCount, Server.IsOfficial), joindata.PeerIndex, joindata.SessionKey))))); break; case CustomGameJoinResponse.IncorrectPlayerState: case CustomGameJoinResponse.ServerCapacityIsFull: case CustomGameJoinResponse.ErrorOnGameServer: case CustomGameJoinResponse.GameServerAccessError: case CustomGameJoinResponse.CustomGameServerNotAvailable: case CustomGameJoinResponse.CustomGameServerFinishing: case CustomGameJoinResponse.IncorrectPassword: case CustomGameJoinResponse.PlayerBanned: case CustomGameJoinResponse.HostReplyTimedOut: case CustomGameJoinResponse.NoPlayerDataFound: case CustomGameJoinResponse.UnspecifiedError: case CustomGameJoinResponse.NoPlayersCanJoin: case CustomGameJoinResponse.AlreadyRequestedWaitingForServerResponse: case CustomGameJoinResponse.RequesterIsNotPartyLeader: case CustomGameJoinResponse.NotAllPlayersReady: default: users.ForEach(u => u.QueuedMessages.Enqueue(new RestDataResponseMessage(JoinCustomGameResultMessage.CreateFailed(msg.Response)))); break; } } response.SetSuccessful(true, "ResultFromServerTask"); }
// @TODO: ClientWantsToConnectCustomGameMessage private void HandleRequestJoinCustomGameMessage(RequestJoinCustomGameMessage msg, ref RestResponse response, RestDataRequestMessage message) { User ServerOwner = _context.Users.Find(user => user.Server?.Id.Guid == msg.CustomBattleId.Guid); User JoiningUser = _context.Users.Find(user => user.Id.PeerId == message.SessionCredentials.PeerId); if (ServerOwner.Server != null) { var properties = new GameServerProperties(ServerOwner.Server.ServerName, ServerOwner.Server.Address, ServerOwner.Server.Port, ServerOwner.Server.Region, ServerOwner.Server.GameModule, ServerOwner.Server.GameType, ServerOwner.Server.Map, "", "", ServerOwner.Server.MaxPlayerCount, ServerOwner.Server.IsOfficial); /*@TODO: * //var result = JoinCustomGameResultMessage.CreateSuccess(new JoinGameData(properties,0,0 )); * ServerOwner.QueuedMessages.Add(new ClientWantsToConnectCustomGameMessage(new PlayerJoinGameData[]{new PlayerJoinGameData(JoiningUser.PlayerData,JoiningUser.PlayerData.LastPlayerName) },msg.Password )); * * response.EnqueueMessage(new RestDataResponseMessage(result)); */ ServerOwner.QueuedMessages.Enqueue(new RestDataResponseMessage(new ClientWantsToConnectCustomGameMessage(new PlayerJoinGameData[] { new PlayerJoinGameData(JoiningUser.PlayerData, JoiningUser.PlayerData.LastPlayerName) }, msg.Password))); response.SetSuccessful(true, "ResultFromServerTask"); } }
private static void HandleChangeRegion(RestDataRequestMessage restDataRequestMessage, ChangeRegionMessage messageContent, ref RestResponse response, RestRequestMessage request) { response.SetSuccessful(true, "ResultFromServerTask"); }
private void HandleMessage(RestDataRequestMessage message, Message messageContent, ref RestResponse response, RestRequestMessage request) { _messageHandlers[messageContent.GetType()].DynamicInvoke(message, messageContent, response, request); }