From 69209c38968c6f4066a772e0a51a2928749217de Mon Sep 17 00:00:00 2001 From: "FWoltermann@gmail.com" Date: Fri, 9 Dec 2011 19:00:23 +0000 Subject: Re-indenting the code to use standard tabs. Yes, I know this is pretty pointless, but who cares? --- Stars45/NetLobbyServer.cpp | 1950 ++++++++++++++++++++++---------------------- 1 file changed, 975 insertions(+), 975 deletions(-) (limited to 'Stars45/NetLobbyServer.cpp') diff --git a/Stars45/NetLobbyServer.cpp b/Stars45/NetLobbyServer.cpp index d66b209..677050c 100644 --- a/Stars45/NetLobbyServer.cpp +++ b/Stars45/NetLobbyServer.cpp @@ -1,15 +1,15 @@ /* Project Starshatter 4.5 - Destroyer Studios LLC - Copyright © 1997-2004. All Rights Reserved. + Destroyer Studios LLC + Copyright © 1997-2004. All Rights Reserved. - SUBSYSTEM: Stars.exe - FILE: NetLobbyServer.cpp - AUTHOR: John DiCamillo + SUBSYSTEM: Stars.exe + FILE: NetLobbyServer.cpp + AUTHOR: John DiCamillo - OVERVIEW - ======== - NetLink Engine for Multiplayer Lobby + OVERVIEW + ======== + NetLink Engine for Multiplayer Lobby */ #include "MemDebug.h" @@ -51,120 +51,120 @@ extern const char* versionInfo; static NetLobbyServer* net_lobby_server = 0; NetLobbyServer::NetLobbyServer() - : announce_time(0), server_config(0), motd_index(1) +: announce_time(0), server_config(0), motd_index(1) { - status = NetServerInfo::LOBBY; - server_name = Text("Starshatter NetLobbyServer ") + versionInfo; - start_time = NetLayer::GetUTC(); - - selected_mission = 0; - - WORD server_port = 11100; - - server_config = NetServerConfig::GetInstance(); - if (server_config) { - server_name = server_config->Name(); - server_port = server_config->GetLobbyPort(); - server_mission = server_config->GetMission(); - - NetAuth::SetAuthLevel(server_config->GetAuthLevel()); - - server_addr = NetAddr(NetHost().Address().IPAddr(), server_port); - link = new(__FILE__,__LINE__) NetLink(server_addr); - } - - LoadMOTD(); - - StarServer* star_server = StarServer::GetInstance(); - DWORD mission_id = 0; - - // only one mission: - if (star_server && server_mission.length() > 0) { - NetCampaignInfo* c = new(__FILE__,__LINE__) NetCampaignInfo; - c->id = Campaign::MULTIPLAYER_MISSIONS; - c->name = "Persistent Multiplayer"; - campaigns.append(c); - - ListIter c_iter = Campaign::GetAllCampaigns(); - while (++c_iter && !mission_id) { - Campaign* campaign = c_iter.value(); - - if (campaign->GetCampaignId() == Campaign::MULTIPLAYER_MISSIONS) { - ListIter m_iter = campaign->GetMissionList(); - while (++m_iter && !mission_id) { - MissionInfo* m = m_iter.value(); - - if (m->script == server_mission) { - c->missions.append(m); - mission_id = (Campaign::MULTIPLAYER_MISSIONS << NET_CAMPAIGN_SHIFT) + m->id; - - SelectMission(mission_id); - star_server->SetGameMode(StarServer::LOAD_MODE); - - // lock in mission: - SetStatus(NetServerInfo::PERSISTENT); - } - } - } - } - } - - // player host may select mission: - if (!mission_id) { - campaigns.destroy(); - - ListIter c_iter = Campaign::GetAllCampaigns(); - while (++c_iter) { - Campaign* campaign = c_iter.value(); - - if (campaign->GetCampaignId() >= Campaign::MULTIPLAYER_MISSIONS) { - NetCampaignInfo* c = new(__FILE__,__LINE__) NetCampaignInfo; - c->id = campaign->GetCampaignId(); - c->name = campaign->Name(); - campaigns.append(c); - - ListIter m_iter = campaign->GetMissionList(); - while (++m_iter) { - MissionInfo* m = m_iter.value(); - c->missions.append(m); - } - } - } - } - - ModConfig* config = ModConfig::GetInstance(); - List& mods = config->GetModInfoList(); - - server_mods.clear(); - server_mods.append(mods); - - net_lobby_server = this; + status = NetServerInfo::LOBBY; + server_name = Text("Starshatter NetLobbyServer ") + versionInfo; + start_time = NetLayer::GetUTC(); + + selected_mission = 0; + + WORD server_port = 11100; + + server_config = NetServerConfig::GetInstance(); + if (server_config) { + server_name = server_config->Name(); + server_port = server_config->GetLobbyPort(); + server_mission = server_config->GetMission(); + + NetAuth::SetAuthLevel(server_config->GetAuthLevel()); + + server_addr = NetAddr(NetHost().Address().IPAddr(), server_port); + link = new(__FILE__,__LINE__) NetLink(server_addr); + } + + LoadMOTD(); + + StarServer* star_server = StarServer::GetInstance(); + DWORD mission_id = 0; + + // only one mission: + if (star_server && server_mission.length() > 0) { + NetCampaignInfo* c = new(__FILE__,__LINE__) NetCampaignInfo; + c->id = Campaign::MULTIPLAYER_MISSIONS; + c->name = "Persistent Multiplayer"; + campaigns.append(c); + + ListIter c_iter = Campaign::GetAllCampaigns(); + while (++c_iter && !mission_id) { + Campaign* campaign = c_iter.value(); + + if (campaign->GetCampaignId() == Campaign::MULTIPLAYER_MISSIONS) { + ListIter m_iter = campaign->GetMissionList(); + while (++m_iter && !mission_id) { + MissionInfo* m = m_iter.value(); + + if (m->script == server_mission) { + c->missions.append(m); + mission_id = (Campaign::MULTIPLAYER_MISSIONS << NET_CAMPAIGN_SHIFT) + m->id; + + SelectMission(mission_id); + star_server->SetGameMode(StarServer::LOAD_MODE); + + // lock in mission: + SetStatus(NetServerInfo::PERSISTENT); + } + } + } + } + } + + // player host may select mission: + if (!mission_id) { + campaigns.destroy(); + + ListIter c_iter = Campaign::GetAllCampaigns(); + while (++c_iter) { + Campaign* campaign = c_iter.value(); + + if (campaign->GetCampaignId() >= Campaign::MULTIPLAYER_MISSIONS) { + NetCampaignInfo* c = new(__FILE__,__LINE__) NetCampaignInfo; + c->id = campaign->GetCampaignId(); + c->name = campaign->Name(); + campaigns.append(c); + + ListIter m_iter = campaign->GetMissionList(); + while (++m_iter) { + MissionInfo* m = m_iter.value(); + c->missions.append(m); + } + } + } + } + + ModConfig* config = ModConfig::GetInstance(); + List& mods = config->GetModInfoList(); + + server_mods.clear(); + server_mods.append(mods); + + net_lobby_server = this; } NetLobbyServer::~NetLobbyServer() { - ListIter iter = users; - while (++iter) { - NetUser* u = iter.value(); - SendData(u, NET_LOBBY_EXIT, Text()); - ExecFrame(); - } - - Sleep(500); - - unit_map.destroy(); - chat_log.destroy(); - users.destroy(); - motd.destroy(); - - if (net_lobby_server == this) - net_lobby_server = 0; + ListIter iter = users; + while (++iter) { + NetUser* u = iter.value(); + SendData(u, NET_LOBBY_EXIT, Text()); + ExecFrame(); + } + + Sleep(500); + + unit_map.destroy(); + chat_log.destroy(); + users.destroy(); + motd.destroy(); + + if (net_lobby_server == this) + net_lobby_server = 0; } NetLobbyServer* NetLobbyServer::GetInstance() { - return net_lobby_server; + return net_lobby_server; } // +--------------------------------------------------------------------+ @@ -172,79 +172,79 @@ NetLobbyServer::GetInstance() void NetLobbyServer::LoadMOTD() { - motd.destroy(); + motd.destroy(); - FILE* f = fopen("motd.txt", "r"); + FILE* f = fopen("motd.txt", "r"); - if (f) { - char line[256]; + if (f) { + char line[256]; - while (fgets(line, 256, f)) { - int n = strlen(line) - 1; - - while (n >= 0 && isspace(line[n])) - line[n--] = 0; + while (fgets(line, 256, f)) { + int n = strlen(line) - 1; + + while (n >= 0 && isspace(line[n])) + line[n--] = 0; - motd.append(new(__FILE__,__LINE__) Text(line)); - } - } + motd.append(new(__FILE__,__LINE__) Text(line)); + } + } } void NetLobbyServer::SendMOTD(NetUser* user) { - if (motd.size() < 1) return; + if (motd.size() < 1) return; - char buffer[512]; + char buffer[512]; - for (int i = 0; i < motd.size(); i++) { - Text* line = motd[i]; + for (int i = 0; i < motd.size(); i++) { + Text* line = motd[i]; - sprintf(buffer, "id %d user \" \" msg \"%s\"", - motd_index++, *line); + sprintf(buffer, "id %d user \" \" msg \"%s\"", + motd_index++, *line); - SendData(user, NET_LOBBY_CHAT, buffer); - } + SendData(user, NET_LOBBY_CHAT, buffer); + } - sprintf(buffer, "id %d user \" \" msg \" \"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); + sprintf(buffer, "id %d user \" \" msg \" \"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); } void NetLobbyServer::SendMods(NetUser* user) { - char buffer[300]; + char buffer[300]; - ModConfig* config = ModConfig::GetInstance(); - List& mods = config->GetModInfoList(); + ModConfig* config = ModConfig::GetInstance(); + List& mods = config->GetModInfoList(); - if (mods.size() < 1) return; + if (mods.size() < 1) return; - for (int i = 0; i < mods.size(); i++) { - ModInfo* info = mods[i]; + for (int i = 0; i < mods.size(); i++) { + ModInfo* info = mods[i]; - sprintf(buffer, "id %d user \"Enabled Mods:\" msg \"%d. '%s' ", - motd_index++, i+1, info->Name().data()); + sprintf(buffer, "id %d user \"Enabled Mods:\" msg \"%d. '%s' ", + motd_index++, i+1, info->Name().data()); - Text msg = buffer; + Text msg = buffer; - if (info->Version().length() > 0) { - msg += "version "; - msg += info->Version().data(); - } + if (info->Version().length() > 0) { + msg += "version "; + msg += info->Version().data(); + } - if (info->URL().length() > 0) { - msg += " - "; - msg += info->URL().data(); - } + if (info->URL().length() > 0) { + msg += " - "; + msg += info->URL().data(); + } - msg += "\""; + msg += "\""; - SendData(user, NET_LOBBY_CHAT, msg); - } + SendData(user, NET_LOBBY_CHAT, msg); + } - sprintf(buffer, "id %d user \" \" msg \" \"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); + sprintf(buffer, "id %d user \" \" msg \" \"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); } // +--------------------------------------------------------------------+ @@ -252,72 +252,72 @@ NetLobbyServer::SendMods(NetUser* user) void NetLobbyServer::ExecFrame() { - NetLobby::ExecFrame(); - - if (announce_time == 0 || Game::RealTime() - announce_time > 200000) { - GameOn(); - announce_time = Game::RealTime(); - } - - if (GetStatus() == NetServerInfo::BRIEFING) { - NetGame* net_game = NetGame::GetInstance(); - - if (net_game && net_game->NumPlayers() > 0) { - SetStatus(NetServerInfo::ACTIVE); - } - } - - StarServer* star_server = StarServer::GetInstance(); - DWORD mission_id = 0; - - // restart persistent mission? - if (star_server && - star_server->GetGameMode() == StarServer::MENU_MODE && - server_mission.length() > 0) { - - NetCampaignInfo* c = campaigns.last(); - - if (!c || c->name != "Persistent Multiplayer") { - c = new(__FILE__,__LINE__) NetCampaignInfo; - c->id = Campaign::MULTIPLAYER_MISSIONS; - c->name = "Persistent Multiplayer"; - campaigns.append(c); - } - else { - c->missions.clear(); - } - - ListIter c_iter = Campaign::GetAllCampaigns(); - while (++c_iter && !mission_id) { - Campaign* campaign = c_iter.value(); - - if (campaign->GetCampaignId() == Campaign::MULTIPLAYER_MISSIONS) { - ListIter m_iter = campaign->GetMissionList(); - while (++m_iter && !mission_id) { - MissionInfo* m = m_iter.value(); - - if (m->script == server_mission) { - c->missions.append(m); - mission_id = (Campaign::MULTIPLAYER_MISSIONS << NET_CAMPAIGN_SHIFT) + m->id; - - // unlock old mission: - SetStatus(NetServerInfo::LOBBY); - - SelectMission(mission_id); - - if (star_server->GetGameMode() == StarServer::MENU_MODE) { - star_server->SetGameMode(StarServer::LOAD_MODE); - } - - // lock in new mission: - SetStatus(NetServerInfo::PERSISTENT); - } - } - } - } - } - - CheckSessions(); + NetLobby::ExecFrame(); + + if (announce_time == 0 || Game::RealTime() - announce_time > 200000) { + GameOn(); + announce_time = Game::RealTime(); + } + + if (GetStatus() == NetServerInfo::BRIEFING) { + NetGame* net_game = NetGame::GetInstance(); + + if (net_game && net_game->NumPlayers() > 0) { + SetStatus(NetServerInfo::ACTIVE); + } + } + + StarServer* star_server = StarServer::GetInstance(); + DWORD mission_id = 0; + + // restart persistent mission? + if (star_server && + star_server->GetGameMode() == StarServer::MENU_MODE && + server_mission.length() > 0) { + + NetCampaignInfo* c = campaigns.last(); + + if (!c || c->name != "Persistent Multiplayer") { + c = new(__FILE__,__LINE__) NetCampaignInfo; + c->id = Campaign::MULTIPLAYER_MISSIONS; + c->name = "Persistent Multiplayer"; + campaigns.append(c); + } + else { + c->missions.clear(); + } + + ListIter c_iter = Campaign::GetAllCampaigns(); + while (++c_iter && !mission_id) { + Campaign* campaign = c_iter.value(); + + if (campaign->GetCampaignId() == Campaign::MULTIPLAYER_MISSIONS) { + ListIter m_iter = campaign->GetMissionList(); + while (++m_iter && !mission_id) { + MissionInfo* m = m_iter.value(); + + if (m->script == server_mission) { + c->missions.append(m); + mission_id = (Campaign::MULTIPLAYER_MISSIONS << NET_CAMPAIGN_SHIFT) + m->id; + + // unlock old mission: + SetStatus(NetServerInfo::LOBBY); + + SelectMission(mission_id); + + if (star_server->GetGameMode() == StarServer::MENU_MODE) { + star_server->SetGameMode(StarServer::LOAD_MODE); + } + + // lock in new mission: + SetStatus(NetServerInfo::PERSISTENT); + } + } + } + } + } + + CheckSessions(); } // +-------------------------------------------------------------------+ @@ -325,12 +325,12 @@ NetLobbyServer::ExecFrame() void NetLobbyServer::SendData(NetUser* dst, int type, Text msg) { - if (link && dst && type > 0 && type < 255) { - if (msg.length()) - link->SendMessage(dst->GetNetID(), (BYTE) type, msg.data(), msg.length(), NetMsg::RELIABLE); - else - link->SendMessage(dst->GetNetID(), (BYTE) type, 0, 0, NetMsg::RELIABLE); - } + if (link && dst && type > 0 && type < 255) { + if (msg.length()) + link->SendMessage(dst->GetNetID(), (BYTE) type, msg.data(), msg.length(), NetMsg::RELIABLE); + else + link->SendMessage(dst->GetNetID(), (BYTE) type, 0, 0, NetMsg::RELIABLE); + } } // +-------------------------------------------------------------------+ @@ -338,64 +338,64 @@ NetLobbyServer::SendData(NetUser* dst, int type, Text msg) void NetLobbyServer::CheckSessions() { - if (!link) - return; - - bool dropped = false; - - ListIter u_iter = users; - while (++u_iter) { - NetUser* u = u_iter.value(); - NetPeer* p = link->FindPeer(u->GetNetID()); - - if (p && (NetLayer::GetUTC() - p->LastReceiveTime()) > NET_DISCONNECT_TIME) { - // check game peer for activity: - NetGame* game = NetGame::GetInstance(); - NetPlayer* player = 0; - NetPeer* p2 = 0; - - if (game) { - player = game->FindPlayerByName(u->Name()); - - if (player) { - p2 = game->GetPeer(player); - - if (p2 && (NetLayer::GetUTC() - p2->LastReceiveTime()) < NET_DISCONNECT_TIME) { - p->SetLastReceiveTime(p2->LastReceiveTime()); - continue; - } - } - else { - ::Print("NetLobbyServer::CheckSessions() Could not find player for '%s'\n", u->Name().data()); - } - } - else { - ::Print("NetLobbyServer::CheckSessions() Could not find net game for '%s'\n", u->Name().data()); - } - - // announce drop: - char timestr[64]; - FormatTime(timestr, Game::RealTime()/1000); - Print("NetLobbyServer: Dropped inactive connection '%s' %s\n", - u->Name().data(), timestr); - - if (u->IsHost()) { - Print(" User was host - ending net game.\n"); - GameStop(); - } - - u_iter.removeItem(); // first remove user from list - NetLobby::UnmapUnit(u->Name()); // then unmap unit - delete u; // now it is safe to discard the inactive user - - dropped = true; - } - } - - if (dropped) { - SendUsers(); - SendUnits(); - } + if (!link) + return; + + bool dropped = false; + + ListIter u_iter = users; + while (++u_iter) { + NetUser* u = u_iter.value(); + NetPeer* p = link->FindPeer(u->GetNetID()); + + if (p && (NetLayer::GetUTC() - p->LastReceiveTime()) > NET_DISCONNECT_TIME) { + // check game peer for activity: + NetGame* game = NetGame::GetInstance(); + NetPlayer* player = 0; + NetPeer* p2 = 0; + + if (game) { + player = game->FindPlayerByName(u->Name()); + + if (player) { + p2 = game->GetPeer(player); + + if (p2 && (NetLayer::GetUTC() - p2->LastReceiveTime()) < NET_DISCONNECT_TIME) { + p->SetLastReceiveTime(p2->LastReceiveTime()); + continue; + } + } + else { + ::Print("NetLobbyServer::CheckSessions() Could not find player for '%s'\n", u->Name().data()); + } + } + else { + ::Print("NetLobbyServer::CheckSessions() Could not find net game for '%s'\n", u->Name().data()); + } + + // announce drop: + char timestr[64]; + FormatTime(timestr, Game::RealTime()/1000); + Print("NetLobbyServer: Dropped inactive connection '%s' %s\n", + u->Name().data(), timestr); + + if (u->IsHost()) { + Print(" User was host - ending net game.\n"); + GameStop(); + } + + u_iter.removeItem(); // first remove user from list + NetLobby::UnmapUnit(u->Name()); // then unmap unit + delete u; // now it is safe to discard the inactive user + + dropped = true; + } + } + + if (dropped) { + SendUsers(); + SendUnits(); + } } // +-------------------------------------------------------------------+ @@ -403,32 +403,32 @@ NetLobbyServer::CheckSessions() void NetLobbyServer::GameStart() { - if (status < NetServerInfo::ACTIVE) { - SetStatus(NetServerInfo::BRIEFING); - - if (Starshatter::GetInstance()) { - Starshatter::GetInstance()->SetGameMode(Starshatter::PREP_MODE); - } - else { - StarServer* s = StarServer::GetInstance(); - if (s && s->GetGameMode() == StarServer::MENU_MODE) { - s->SetGameMode(StarServer::LOAD_MODE); - } - } - } + if (status < NetServerInfo::ACTIVE) { + SetStatus(NetServerInfo::BRIEFING); + + if (Starshatter::GetInstance()) { + Starshatter::GetInstance()->SetGameMode(Starshatter::PREP_MODE); + } + else { + StarServer* s = StarServer::GetInstance(); + if (s && s->GetGameMode() == StarServer::MENU_MODE) { + s->SetGameMode(StarServer::LOAD_MODE); + } + } + } } void NetLobbyServer::GameStop() { - if (GetStatus() != NetServerInfo::PERSISTENT) { - SetStatus(NetServerInfo::LOBBY); - - StarServer* s = StarServer::GetInstance(); - if (s && s->GetGameMode() != StarServer::MENU_MODE) { - s->SetGameMode(StarServer::MENU_MODE); - } - } + if (GetStatus() != NetServerInfo::PERSISTENT) { + SetStatus(NetServerInfo::LOBBY); + + StarServer* s = StarServer::GetInstance(); + if (s && s->GetGameMode() != StarServer::MENU_MODE) { + s->SetGameMode(StarServer::MENU_MODE); + } + } } // +-------------------------------------------------------------------+ @@ -436,59 +436,59 @@ NetLobbyServer::GameStop() void NetLobbyServer::BanUser(NetUser* user) { - if (user && !user->IsHost()) { - ::Print("NetLobbyServer::BanUser name '%s' addr %d.%d.%d.%d\n", - user->Name().data(), - user->GetAddress().B1(), - user->GetAddress().B2(), - user->GetAddress().B3(), - user->GetAddress().B4()); + if (user && !user->IsHost()) { + ::Print("NetLobbyServer::BanUser name '%s' addr %d.%d.%d.%d\n", + user->Name().data(), + user->GetAddress().B1(), + user->GetAddress().B2(), + user->GetAddress().B3(), + user->GetAddress().B4()); - SendData(user, NET_LOBBY_EXIT, Text()); + SendData(user, NET_LOBBY_EXIT, Text()); - if (server_config) - server_config->BanUser(user); + if (server_config) + server_config->BanUser(user); - DelUser(user); - } + DelUser(user); + } } void NetLobbyServer::AddUser(NetUser* user) { - if (server_config && server_config->IsUserBanned(user)) { - delete user; - return; - } + if (server_config && server_config->IsUserBanned(user)) { + delete user; + return; + } - NetLobby::AddUser(user); - SendUsers(); + NetLobby::AddUser(user); + SendUsers(); } void NetLobbyServer::DelUser(NetUser* user) { - NetLobby::DelUser(user); - SendUsers(); + NetLobby::DelUser(user); + SendUsers(); } void NetLobbyServer::SendUsers() { - Text content; + Text content; - ListIter u_iter = users; - while (++u_iter) { - NetUser* u = u_iter.value(); - content += u->GetDescription(); - } + ListIter u_iter = users; + while (++u_iter) { + NetUser* u = u_iter.value(); + content += u->GetDescription(); + } - u_iter.reset(); + u_iter.reset(); - while (++u_iter) { - NetUser* u = u_iter.value(); - SendData(u, NET_LOBBY_USER_LIST, content); - } + while (++u_iter) { + NetUser* u = u_iter.value(); + SendData(u, NET_LOBBY_USER_LIST, content); + } } // +-------------------------------------------------------------------+ @@ -496,12 +496,12 @@ NetLobbyServer::SendUsers() void NetLobbyServer::RequestAuth(NetUser* user) { - if (user) { - Text request = NetAuth::CreateAuthRequest(user); + if (user) { + Text request = NetAuth::CreateAuthRequest(user); - if (request.length() > 0) - SendData(user, NET_LOBBY_AUTH_USER, request); - } + if (request.length() > 0) + SendData(user, NET_LOBBY_AUTH_USER, request); + } } // +-------------------------------------------------------------------+ @@ -509,75 +509,75 @@ NetLobbyServer::RequestAuth(NetUser* user) void NetLobbyServer::AddChat(NetUser* user, const char* msg, bool route) { - NetChatEntry* entry = 0; - - if (user && msg && *msg) { - bool msg_ok = false; - const char* p = msg; - - while (*p && !msg_ok) { - if (!isspace(*p++)) - msg_ok = true; - } - - if (msg_ok) { - entry = new(__FILE__,__LINE__) NetChatEntry(user, msg); - - chat_log.append(entry); - - // forward to all clients: - if (users.size()) { - char buffer[768]; - char msg_buf[256]; - char usr_buf[256]; - - // safe quotes uses a static buffer, - // so make sure to save copies of the - // results when using more than one in - // a function call... - - strcpy(msg_buf, SafeQuotes(msg)); - strcpy(usr_buf, SafeQuotes(user->Name())); - - sprintf(buffer, "id %d user \"%s\" msg \"%s\"", - entry->GetID(), usr_buf, msg_buf); - - ListIter iter = users; - while (++iter) { - NetUser* u = iter.value(); - SendData(u, NET_LOBBY_CHAT, buffer); - } - - if (route) { - // send to active game: - NetUtil::SendChat(0xffff, usr_buf, msg_buf); - } - } - } - } + NetChatEntry* entry = 0; + + if (user && msg && *msg) { + bool msg_ok = false; + const char* p = msg; + + while (*p && !msg_ok) { + if (!isspace(*p++)) + msg_ok = true; + } + + if (msg_ok) { + entry = new(__FILE__,__LINE__) NetChatEntry(user, msg); + + chat_log.append(entry); + + // forward to all clients: + if (users.size()) { + char buffer[768]; + char msg_buf[256]; + char usr_buf[256]; + + // safe quotes uses a static buffer, + // so make sure to save copies of the + // results when using more than one in + // a function call... + + strcpy(msg_buf, SafeQuotes(msg)); + strcpy(usr_buf, SafeQuotes(user->Name())); + + sprintf(buffer, "id %d user \"%s\" msg \"%s\"", + entry->GetID(), usr_buf, msg_buf); + + ListIter iter = users; + while (++iter) { + NetUser* u = iter.value(); + SendData(u, NET_LOBBY_CHAT, buffer); + } + + if (route) { + // send to active game: + NetUtil::SendChat(0xffff, usr_buf, msg_buf); + } + } + } + } } void NetLobbyServer::ClearChat() { - NetLobby::ClearChat(); + NetLobby::ClearChat(); } void NetLobbyServer::SaveChat() { - FILE* f = fopen("chat.txt", "w"); - if (f) { - for (int i = 0; i < chat_log.size(); i++) { - NetChatEntry* c = chat_log[i]; - fprintf(f, "%08x [%s] %s\n", - c->GetTime(), - c->GetUser().data(), - c->GetMessage().data()); - } - - fclose(f); - } + FILE* f = fopen("chat.txt", "w"); + if (f) { + for (int i = 0; i < chat_log.size(); i++) { + NetChatEntry* c = chat_log[i]; + fprintf(f, "%08x [%s] %s\n", + c->GetTime(), + c->GetUser().data(), + c->GetMessage().data()); + } + + fclose(f); + } } // +-------------------------------------------------------------------+ @@ -585,20 +585,20 @@ NetLobbyServer::SaveChat() void NetLobbyServer::SelectMission(DWORD id) { - if (GetStatus() == NetServerInfo::PERSISTENT) - return; + if (GetStatus() == NetServerInfo::PERSISTENT) + return; - NetLobby::SelectMission(id); + NetLobby::SelectMission(id); - // inform all users of the selection: - char buffer[32]; - sprintf(buffer, "m_id 0x%08x", selected_mission); + // inform all users of the selection: + char buffer[32]; + sprintf(buffer, "m_id 0x%08x", selected_mission); - ListIter iter = users; - while (++iter) { - NetUser* u = iter.value(); - SendData(u, NET_LOBBY_MISSION_SELECT, buffer); - } + ListIter iter = users; + while (++iter) { + NetUser* u = iter.value(); + SendData(u, NET_LOBBY_MISSION_SELECT, buffer); + } } // +-------------------------------------------------------------------+ @@ -606,138 +606,138 @@ NetLobbyServer::SelectMission(DWORD id) List& NetLobbyServer::GetUnitMap() { - if (!mission) { - unit_map.destroy(); - return unit_map; - } - - List units; - ListIter iter = mission->GetElements(); - int i = 0; - - Sim* sim = Sim::GetSim(); - if (sim && sim->GetElements().size() > 0) - iter = sim->GetMissionElements(); - - // create new entries for the playable elements in the mission or simulation: - while (++iter) { - MissionElement* elem = iter.value(); - - if (elem->IsPlayable()) { - NetUnitEntry* u = 0; - if (elem->Count() == 1) { - u = new(__FILE__,__LINE__) NetUnitEntry(elem, 0); - u->SetLives(elem->RespawnCount() + 1); - u->SetMissionRole(elem->MissionRole()); - u->SetIFF(elem->GetIFF()); - - if (elem->GetDesign()) - u->SetDesign(elem->GetDesign()->name); - - if (elem->Ships().size() > 0) { - MissionShip* s = elem->Ships()[0]; - u->SetIntegrity((int) s->Integrity()); - } - units.append(u); - } - else { - for (int i = 0; i < elem->Count(); i++) { - u = new(__FILE__,__LINE__) NetUnitEntry(elem, i+1); - u->SetMissionRole(elem->MissionRole()); - u->SetIFF(elem->GetIFF()); - - if (elem->GetDesign()) - u->SetDesign(elem->GetDesign()->name); - - if (elem->Ships().size() > i) { - MissionShip* s = elem->Ships()[i]; - u->SetLives(s->Respawns() + 1); - u->SetIntegrity((int) s->Integrity()); - } - units.append(u); - } - } - } - } - - // match new entries with any existing map entries: - if (unit_map.size()) { - for (i = 0; i < units.size(); i++) { - NetUnitEntry* e_new = units[i]; - NetUnitEntry* e_old = unit_map.find(e_new); - - if (e_old) { - e_new->SetUserName(e_old->GetUserName()); - e_new->SetLock(e_old->GetLocked()); - } - } - } - - // rewrite the unit map with the new entries: - ClearUnitMap(); - for (i = 0; i < units.size(); i++) { - unit_map.append(units[i]); - } - - return unit_map; + if (!mission) { + unit_map.destroy(); + return unit_map; + } + + List units; + ListIter iter = mission->GetElements(); + int i = 0; + + Sim* sim = Sim::GetSim(); + if (sim && sim->GetElements().size() > 0) + iter = sim->GetMissionElements(); + + // create new entries for the playable elements in the mission or simulation: + while (++iter) { + MissionElement* elem = iter.value(); + + if (elem->IsPlayable()) { + NetUnitEntry* u = 0; + if (elem->Count() == 1) { + u = new(__FILE__,__LINE__) NetUnitEntry(elem, 0); + u->SetLives(elem->RespawnCount() + 1); + u->SetMissionRole(elem->MissionRole()); + u->SetIFF(elem->GetIFF()); + + if (elem->GetDesign()) + u->SetDesign(elem->GetDesign()->name); + + if (elem->Ships().size() > 0) { + MissionShip* s = elem->Ships()[0]; + u->SetIntegrity((int) s->Integrity()); + } + units.append(u); + } + else { + for (int i = 0; i < elem->Count(); i++) { + u = new(__FILE__,__LINE__) NetUnitEntry(elem, i+1); + u->SetMissionRole(elem->MissionRole()); + u->SetIFF(elem->GetIFF()); + + if (elem->GetDesign()) + u->SetDesign(elem->GetDesign()->name); + + if (elem->Ships().size() > i) { + MissionShip* s = elem->Ships()[i]; + u->SetLives(s->Respawns() + 1); + u->SetIntegrity((int) s->Integrity()); + } + units.append(u); + } + } + } + } + + // match new entries with any existing map entries: + if (unit_map.size()) { + for (i = 0; i < units.size(); i++) { + NetUnitEntry* e_new = units[i]; + NetUnitEntry* e_old = unit_map.find(e_new); + + if (e_old) { + e_new->SetUserName(e_old->GetUserName()); + e_new->SetLock(e_old->GetLocked()); + } + } + } + + // rewrite the unit map with the new entries: + ClearUnitMap(); + for (i = 0; i < units.size(); i++) { + unit_map.append(units[i]); + } + + return unit_map; } void NetLobbyServer::MapUnit(int n, const char* user, bool lock) { - NetLobby::MapUnit(n, user, lock); + NetLobby::MapUnit(n, user, lock); - Text reply; + Text reply; - ListIter map_iter = GetUnitMap(); - while (++map_iter) { - NetUnitEntry* unit = map_iter.value(); - reply += unit->GetDescription(); - } + ListIter map_iter = GetUnitMap(); + while (++map_iter) { + NetUnitEntry* unit = map_iter.value(); + reply += unit->GetDescription(); + } - ListIter u_iter = users; - while (++u_iter) { - NetUser* u = u_iter.value(); - SendData(u, NET_LOBBY_UNIT_LIST, reply); - } + ListIter u_iter = users; + while (++u_iter) { + NetUser* u = u_iter.value(); + SendData(u, NET_LOBBY_UNIT_LIST, reply); + } } void NetLobbyServer::UnmapUnit(const char* user) { - NetLobby::UnmapUnit(user); + NetLobby::UnmapUnit(user); - Text reply; + Text reply; - ListIter map_iter = GetUnitMap(); - while (++map_iter) { - NetUnitEntry* unit = map_iter.value(); - reply += unit->GetDescription(); - } + ListIter map_iter = GetUnitMap(); + while (++map_iter) { + NetUnitEntry* unit = map_iter.value(); + reply += unit->GetDescription(); + } - ListIter u_iter = users; - while (++u_iter) { - NetUser* u = u_iter.value(); - SendData(u, NET_LOBBY_UNIT_LIST, reply); - } + ListIter u_iter = users; + while (++u_iter) { + NetUser* u = u_iter.value(); + SendData(u, NET_LOBBY_UNIT_LIST, reply); + } } void NetLobbyServer::SendUnits() { - Text content; - - ListIter map_iter = GetUnitMap(); - while (++map_iter) { - NetUnitEntry* unit = map_iter.value(); - content += unit->GetDescription(); - } - - ListIter u_iter = users; - while (++u_iter) { - NetUser* u = u_iter.value(); - SendData(u, NET_LOBBY_UNIT_LIST, content); - } + Text content; + + ListIter map_iter = GetUnitMap(); + while (++map_iter) { + NetUnitEntry* unit = map_iter.value(); + content += unit->GetDescription(); + } + + ListIter u_iter = users; + while (++u_iter) { + NetUser* u = u_iter.value(); + SendData(u, NET_LOBBY_UNIT_LIST, content); + } } // +-------------------------------------------------------------------+ @@ -745,40 +745,40 @@ NetLobbyServer::SendUnits() Text NetLobbyServer::Serialize(Mission* m, NetUser* user) { - Text s; + Text s; - if (!m || !user) - return s; + if (!m || !user) + return s; - NetUnitEntry* unit = 0; + NetUnitEntry* unit = 0; - ListIter u_iter = GetUnitMap(); - while (++u_iter && !unit) { - NetUnitEntry* u = u_iter.value(); - if (u->GetUserName() == user->Name()) - unit = u; - } + ListIter u_iter = GetUnitMap(); + while (++u_iter && !unit) { + NetUnitEntry* u = u_iter.value(); + if (u->GetUserName() == user->Name()) + unit = u; + } - if (unit) - s = m->Serialize(unit->GetElemName(), unit->GetIndex()); + if (unit) + s = m->Serialize(unit->GetElemName(), unit->GetIndex()); - return s; + return s; } Mission* NetLobbyServer::GetSelectedMission() { - if (mission) { - Text content = Serialize(mission, GetLocalUser()); - Campaign* c = Campaign::SelectCampaign("Multiplayer Missions"); + if (mission) { + Text content = Serialize(mission, GetLocalUser()); + Campaign* c = Campaign::SelectCampaign("Multiplayer Missions"); - if (c) { - c->LoadNetMission(99999, content.data()); - return c->GetMission(99999); - } - } + if (c) { + c->LoadNetMission(99999, content.data()); + return c->GetMission(99999); + } + } - return mission; + return mission; } // +-------------------------------------------------------------------+ @@ -786,39 +786,39 @@ NetLobbyServer::GetSelectedMission() void NetLobbyServer::GameOn() { - NetHost host; - const char* type = "Starshatter"; - const char* password = "No"; - char address[32]; - - strcpy(address, "0"); - - if (server_config) { - if (server_config->GetGameType() == NetServerConfig::NET_GAME_PRIVATE) - return; - - if (server_config->GetGameType() == NetServerConfig::NET_GAME_LAN) { - type = "Starshatter-LAN"; - sprintf(address, "%d.%d.%d.%d", - host.Address().B1(), - host.Address().B2(), - host.Address().B3(), - host.Address().B4()); - } - else { - type = "Starshatter"; - sprintf(address, "0.0.0.0"); - } - - if (server_config->GetGamePass().length() > 0) - password = "Yes"; - } - - NetBrokerClient::GameOn(server_name, - type, - address, - server_addr.Port(), - password); + NetHost host; + const char* type = "Starshatter"; + const char* password = "No"; + char address[32]; + + strcpy(address, "0"); + + if (server_config) { + if (server_config->GetGameType() == NetServerConfig::NET_GAME_PRIVATE) + return; + + if (server_config->GetGameType() == NetServerConfig::NET_GAME_LAN) { + type = "Starshatter-LAN"; + sprintf(address, "%d.%d.%d.%d", + host.Address().B1(), + host.Address().B2(), + host.Address().B3(), + host.Address().B4()); + } + else { + type = "Starshatter"; + sprintf(address, "0.0.0.0"); + } + + if (server_config->GetGamePass().length() > 0) + password = "Yes"; + } + + NetBrokerClient::GameOn(server_name, + type, + address, + server_addr.Port(), + password); } void @@ -835,52 +835,52 @@ NetLobbyServer::DoPing(NetPeer* peer, Text s) void NetLobbyServer::DoServerInfo(NetPeer* peer, Text s) { - if (peer && peer->NetID()) { - char buffer[1024]; - WORD gameport = 11101; - - if (server_config) - gameport = server_config->GetGamePort(); - - sprintf(buffer, "info \"%s\" version \"%s\" mode %d users %d host %s port %d", - MachineInfo::GetShortDescription(), - versionInfo, - GetStatus(), - NumUsers(), - HasHost() ? "true" : "false", - gameport); - - link->SendMessage(peer->NetID(), (BYTE) NET_LOBBY_SERVER_INFO, buffer, strlen(buffer), NetMsg::RELIABLE); - } + if (peer && peer->NetID()) { + char buffer[1024]; + WORD gameport = 11101; + + if (server_config) + gameport = server_config->GetGamePort(); + + sprintf(buffer, "info \"%s\" version \"%s\" mode %d users %d host %s port %d", + MachineInfo::GetShortDescription(), + versionInfo, + GetStatus(), + NumUsers(), + HasHost() ? "true" : "false", + gameport); + + link->SendMessage(peer->NetID(), (BYTE) NET_LOBBY_SERVER_INFO, buffer, strlen(buffer), NetMsg::RELIABLE); + } } void NetLobbyServer::DoServerMods(NetPeer* peer, Text s) { - if (peer && peer->NetID()) { - Text response; - ModConfig* config = ModConfig::GetInstance(); - List& mods = config->GetModInfoList(); - ListIter mod_iter = mods; - - char buffer[32]; - sprintf(buffer, "num %d ", mods.size()); - response += buffer; - - while (++mod_iter) { - ModInfo* info = mod_iter.value(); - - response += "mod \""; - response += info->Name(); - response += "\" url \""; - response += info->URL(); - response += "\" ver \""; - response += info->Version(); - response += "\" "; - } - - link->SendMessage(peer->NetID(), (BYTE) NET_LOBBY_SERVER_MODS, response, response.length(), NetMsg::RELIABLE); - } + if (peer && peer->NetID()) { + Text response; + ModConfig* config = ModConfig::GetInstance(); + List& mods = config->GetModInfoList(); + ListIter mod_iter = mods; + + char buffer[32]; + sprintf(buffer, "num %d ", mods.size()); + response += buffer; + + while (++mod_iter) { + ModInfo* info = mod_iter.value(); + + response += "mod \""; + response += info->Name(); + response += "\" url \""; + response += info->URL(); + response += "\" ver \""; + response += info->Version(); + response += "\" "; + } + + link->SendMessage(peer->NetID(), (BYTE) NET_LOBBY_SERVER_MODS, response, response.length(), NetMsg::RELIABLE); + } } // +-------------------------------------------------------------------+ @@ -888,472 +888,472 @@ NetLobbyServer::DoServerMods(NetPeer* peer, Text s) void NetLobbyServer::DoLogin(NetPeer* peer, Text msg) { - List params; - ParseMsg(msg, params); - - Text name; - Text pass; - Text host; - Text gamepass; - Text signature; - Text squadron; - Text version; - int rank = 0; - int flight_time = 0; - int missions = 0; - int kills = 0; - int losses = 0; - - for (int i = 0; i < params.size(); i++) { - NetLobbyParam* p = params[i]; - - int num = 0; - sscanf(p->value, "%d", &num); - - if (p->name == "name") - name = p->value; - - else if (p->name == "pass") - pass = p->value; - - else if (p->name == "gamepass") - gamepass = p->value; - - else if (p->name == "host") - host = p->value; - - else if (p->name == "sig") - signature = p->value; - - else if (p->name == "squad") - squadron = p->value; - - else if (p->name == "version") - version = p->value; - - else if (p->name == "rank") - rank = num; - - else if (p->name == "time") - flight_time = num; - - else if (p->name == "miss") - missions = num; - - else if (p->name == "kill") - kills = num; - - else if (p->name == "loss") - losses = num; - } - - params.destroy(); - - // first check the game version: - if (version != versionInfo) { - Print("NetLobbyServer - user '%s' tried to login with invalid game version '%s'\n", - name.data(), version.data()); - - return; - } - - // next check the game password: - if (server_config && server_config->GetGamePass().length() > 0) { - if (gamepass != server_config->GetGamePass()) { - Print("NetLobbyServer - user '%s' tried to login with invalid game password '%s'\n", - name.data(), gamepass.data()); - - return; - } - } - - // now try to log the user in: - NetUser* pre_existing = FindUserByName(name); - - // is user already logged in? - if (pre_existing) { - if (pre_existing->Pass() == pass && - pre_existing->GetAddress().IPAddr() == peer->Address().IPAddr()) { - } - } - - // otherwise, create a new user: - else { - NetUser* user = new(__FILE__,__LINE__) NetUser(name); - user->SetAddress(peer->Address()); - user->SetNetID(peer->NetID()); - user->SetPass(pass); - user->SetSignature(signature); - user->SetSquadron(squadron); - user->SetRank(rank); - user->SetFlightTime(flight_time); - user->SetMissions(missions); - user->SetKills(kills); - user->SetLosses(losses); - - if (host == "true" && !HasHost()) - user->SetHost(true); - - AddUser(user); - RequestAuth(user); - SendMOTD(user); - SendMods(user); - } + List params; + ParseMsg(msg, params); + + Text name; + Text pass; + Text host; + Text gamepass; + Text signature; + Text squadron; + Text version; + int rank = 0; + int flight_time = 0; + int missions = 0; + int kills = 0; + int losses = 0; + + for (int i = 0; i < params.size(); i++) { + NetLobbyParam* p = params[i]; + + int num = 0; + sscanf(p->value, "%d", &num); + + if (p->name == "name") + name = p->value; + + else if (p->name == "pass") + pass = p->value; + + else if (p->name == "gamepass") + gamepass = p->value; + + else if (p->name == "host") + host = p->value; + + else if (p->name == "sig") + signature = p->value; + + else if (p->name == "squad") + squadron = p->value; + + else if (p->name == "version") + version = p->value; + + else if (p->name == "rank") + rank = num; + + else if (p->name == "time") + flight_time = num; + + else if (p->name == "miss") + missions = num; + + else if (p->name == "kill") + kills = num; + + else if (p->name == "loss") + losses = num; + } + + params.destroy(); + + // first check the game version: + if (version != versionInfo) { + Print("NetLobbyServer - user '%s' tried to login with invalid game version '%s'\n", + name.data(), version.data()); + + return; + } + + // next check the game password: + if (server_config && server_config->GetGamePass().length() > 0) { + if (gamepass != server_config->GetGamePass()) { + Print("NetLobbyServer - user '%s' tried to login with invalid game password '%s'\n", + name.data(), gamepass.data()); + + return; + } + } + + // now try to log the user in: + NetUser* pre_existing = FindUserByName(name); + + // is user already logged in? + if (pre_existing) { + if (pre_existing->Pass() == pass && + pre_existing->GetAddress().IPAddr() == peer->Address().IPAddr()) { + } + } + + // otherwise, create a new user: + else { + NetUser* user = new(__FILE__,__LINE__) NetUser(name); + user->SetAddress(peer->Address()); + user->SetNetID(peer->NetID()); + user->SetPass(pass); + user->SetSignature(signature); + user->SetSquadron(squadron); + user->SetRank(rank); + user->SetFlightTime(flight_time); + user->SetMissions(missions); + user->SetKills(kills); + user->SetLosses(losses); + + if (host == "true" && !HasHost()) + user->SetHost(true); + + AddUser(user); + RequestAuth(user); + SendMOTD(user); + SendMods(user); + } } void NetLobbyServer::DoLogout(NetPeer* peer, Text msg) { - NetUser* user = FindUserByNetID(peer->NetID()); + NetUser* user = FindUserByNetID(peer->NetID()); - if (user) { - if (user->IsHost()) - GameStop(); + if (user) { + if (user->IsHost()) + GameStop(); - DelUser(user); - } + DelUser(user); + } } void NetLobbyServer::DoUserAuth(NetPeer* peer, Text msg) { - NetUser* user = FindUserByNetID(peer->NetID()); + NetUser* user = FindUserByNetID(peer->NetID()); - if (user) { - NetAuth::AuthUser(user, msg); + if (user) { + NetAuth::AuthUser(user, msg); - if (!user->IsAuthOK()) { - char buffer[256]; + if (!user->IsAuthOK()) { + char buffer[256]; - sprintf(buffer, "id %d user \"SERVER\" msg \"**********\"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); + sprintf(buffer, "id %d user \"SERVER\" msg \"**********\"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); - sprintf(buffer, "id %d user \"SERVER\" msg \"*** Your game configuration does not match the server.\"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); + sprintf(buffer, "id %d user \"SERVER\" msg \"*** Your game configuration does not match the server.\"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); - if (server_mods.size() > 0) { - sprintf(buffer, "id %d user \"SERVER\" msg \"*** Please check that you have the proper mods deployed in\"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); - sprintf(buffer, "id %d user \"SERVER\" msg \"*** the order shown above.\"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); - } + if (server_mods.size() > 0) { + sprintf(buffer, "id %d user \"SERVER\" msg \"*** Please check that you have the proper mods deployed in\"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); + sprintf(buffer, "id %d user \"SERVER\" msg \"*** the order shown above.\"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); + } - else { - sprintf(buffer, "id %d user \"SERVER\" msg \"*** Please verify that you have no mods deployed.\"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); - } + else { + sprintf(buffer, "id %d user \"SERVER\" msg \"*** Please verify that you have no mods deployed.\"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); + } - sprintf(buffer, "id %d user \"SERVER\" msg \"*** You will not be permitted to join the game with an invalid\"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); + sprintf(buffer, "id %d user \"SERVER\" msg \"*** You will not be permitted to join the game with an invalid\"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); - sprintf(buffer, "id %d user \"SERVER\" msg \"*** configuration. You may reconnect to this server after you\"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); + sprintf(buffer, "id %d user \"SERVER\" msg \"*** configuration. You may reconnect to this server after you\"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); - sprintf(buffer, "id %d user \"SERVER\" msg \"*** have corrected your mod configuration.\"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); + sprintf(buffer, "id %d user \"SERVER\" msg \"*** have corrected your mod configuration.\"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); - sprintf(buffer, "id %d user \"SERVER\" msg \"**********\"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); + sprintf(buffer, "id %d user \"SERVER\" msg \"**********\"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); - sprintf(buffer, "id %d user \" \" msg \" \"", motd_index++); - SendData(user, NET_LOBBY_CHAT, buffer); - } - } + sprintf(buffer, "id %d user \" \" msg \" \"", motd_index++); + SendData(user, NET_LOBBY_CHAT, buffer); + } + } } void NetLobbyServer::DoChat(NetPeer* peer, Text msg) { - List params; - ParseMsg(msg, params); + List params; + ParseMsg(msg, params); - Text chat_msg; + Text chat_msg; - for (int i = 0; i < params.size(); i++) { - NetLobbyParam* p = params[i]; + for (int i = 0; i < params.size(); i++) { + NetLobbyParam* p = params[i]; - int num = 0; - sscanf(p->value, "%d", &num); + int num = 0; + sscanf(p->value, "%d", &num); - if (p->name == "msg") { - chat_msg = p->value; - } - } + if (p->name == "msg") { + chat_msg = p->value; + } + } - params.destroy(); + params.destroy(); - NetUser* user = FindUserByNetID(peer->NetID()); + NetUser* user = FindUserByNetID(peer->NetID()); - if (user) { - // receive chat from client: - if (chat_msg.length()) { - AddChat(user, chat_msg); - } + if (user) { + // receive chat from client: + if (chat_msg.length()) { + AddChat(user, chat_msg); + } - // request for chat log: - else { - ListIter iter = chat_log; - while (++iter) { - NetChatEntry* entry = iter.value(); + // request for chat log: + else { + ListIter iter = chat_log; + while (++iter) { + NetChatEntry* entry = iter.value(); - char buffer[512]; - char msg_buf[256]; - char usr_buf[256]; + char buffer[512]; + char msg_buf[256]; + char usr_buf[256]; - // safe quotes uses a static buffer, - // so make sure to save copies of the - // results when using more than one in - // a function call... + // safe quotes uses a static buffer, + // so make sure to save copies of the + // results when using more than one in + // a function call... - strcpy(msg_buf, SafeQuotes(entry->GetMessage())); - strcpy(usr_buf, SafeQuotes(entry->GetUser())); + strcpy(msg_buf, SafeQuotes(entry->GetMessage())); + strcpy(usr_buf, SafeQuotes(entry->GetUser())); - sprintf(buffer, "id %d user \"%s\" msg \"%s\"", - entry->GetID(), usr_buf, msg_buf); + sprintf(buffer, "id %d user \"%s\" msg \"%s\"", + entry->GetID(), usr_buf, msg_buf); - SendData(user, NET_LOBBY_CHAT, buffer); - } - } - } + SendData(user, NET_LOBBY_CHAT, buffer); + } + } + } } void NetLobbyServer::DoUserList(NetPeer* peer, Text msg) { - NetUser* user = FindUserByNetID(peer->NetID()); + NetUser* user = FindUserByNetID(peer->NetID()); - if (user) { - Text content; + if (user) { + Text content; - if (local_user) - content += local_user->GetDescription(); + if (local_user) + content += local_user->GetDescription(); - ListIter iter = users; - while (++iter) { - NetUser* u = iter.value(); - content += u->GetDescription(); - } + ListIter iter = users; + while (++iter) { + NetUser* u = iter.value(); + content += u->GetDescription(); + } - SendData(user, NET_LOBBY_USER_LIST, content); - } + SendData(user, NET_LOBBY_USER_LIST, content); + } } void NetLobbyServer::DoBanUser(NetPeer* peer, Text msg) { - NetUser* user = FindUserByNetID(peer->NetID()); + NetUser* user = FindUserByNetID(peer->NetID()); - if (user && user->IsHost() && user->IsAuthOK()) { - List params; - ParseMsg(msg, params); + if (user && user->IsHost() && user->IsAuthOK()) { + List params; + ParseMsg(msg, params); - if (params.size() > 0) { - NetLobbyParam* p = params[0]; + if (params.size() > 0) { + NetLobbyParam* p = params[0]; - if (p->name == "user") { - Text user_name = p->value; + if (p->name == "user") { + Text user_name = p->value; - NetUser* u = FindUserByName(user_name); - if (u && !u->IsHost()) - BanUser(u); - } - } + NetUser* u = FindUserByName(user_name); + if (u && !u->IsHost()) + BanUser(u); + } + } - params.destroy(); - } + params.destroy(); + } } void NetLobbyServer::DoMissionList(NetPeer* peer, Text msg) { - NetUser* user = FindUserByNetID(peer->NetID()); - - if (user) { - Text reply; - char buffer[4096]; - - ListIter c_iter = Campaign::GetAllCampaigns(); - while (++c_iter) { - Campaign* c = c_iter.value(); - - if (c->GetCampaignId() >= Campaign::MULTIPLAYER_MISSIONS) { - sprintf(buffer, "c_id 0x%08x c_name \"%s\" ", - c->GetCampaignId(), - SafeQuotes(c->Name())); - - reply += buffer; - } - } - - c_iter.reset(); - - while (++c_iter) { - Campaign* c = c_iter.value(); - - if (c->GetCampaignId() >= Campaign::MULTIPLAYER_MISSIONS) { - - ListIter m_iter = c->GetMissionList(); - while (++m_iter) { - MissionInfo* m = m_iter.value(); - - int mission_id = (c->GetCampaignId() << NET_CAMPAIGN_SHIFT) + m->id; - - sprintf(buffer, "m_id 0x%08x ", mission_id); - reply += buffer; - - reply += "m_name \""; - reply += SafeQuotes(m->name); - - // long version of safe quotes: - int n = 0; - const char* s = m->description.data(); - - while (*s && n < 4090) { - if (*s == '"') { - buffer[n++] = '\''; - s++; - } - else if (*s == '\n') { - buffer[n++] = '\\'; - buffer[n++] = 'n'; - s++; - } - else if (*s == '\t') { - buffer[n++] = '\\'; - buffer[n++] = 't'; - s++; - } - else { - buffer[n++] = *s++; - } - } - - // don't forget the null terminator! - buffer[n] = 0; - - reply += "\" m_desc \""; - reply += buffer; - - reply += "\" "; - } - } - } - - SendData(user, NET_LOBBY_MISSION_LIST, reply); - - sprintf(buffer, "m_id 0x%08x", selected_mission); - SendData(user, NET_LOBBY_MISSION_SELECT, buffer); - } + NetUser* user = FindUserByNetID(peer->NetID()); + + if (user) { + Text reply; + char buffer[4096]; + + ListIter c_iter = Campaign::GetAllCampaigns(); + while (++c_iter) { + Campaign* c = c_iter.value(); + + if (c->GetCampaignId() >= Campaign::MULTIPLAYER_MISSIONS) { + sprintf(buffer, "c_id 0x%08x c_name \"%s\" ", + c->GetCampaignId(), + SafeQuotes(c->Name())); + + reply += buffer; + } + } + + c_iter.reset(); + + while (++c_iter) { + Campaign* c = c_iter.value(); + + if (c->GetCampaignId() >= Campaign::MULTIPLAYER_MISSIONS) { + + ListIter m_iter = c->GetMissionList(); + while (++m_iter) { + MissionInfo* m = m_iter.value(); + + int mission_id = (c->GetCampaignId() << NET_CAMPAIGN_SHIFT) + m->id; + + sprintf(buffer, "m_id 0x%08x ", mission_id); + reply += buffer; + + reply += "m_name \""; + reply += SafeQuotes(m->name); + + // long version of safe quotes: + int n = 0; + const char* s = m->description.data(); + + while (*s && n < 4090) { + if (*s == '"') { + buffer[n++] = '\''; + s++; + } + else if (*s == '\n') { + buffer[n++] = '\\'; + buffer[n++] = 'n'; + s++; + } + else if (*s == '\t') { + buffer[n++] = '\\'; + buffer[n++] = 't'; + s++; + } + else { + buffer[n++] = *s++; + } + } + + // don't forget the null terminator! + buffer[n] = 0; + + reply += "\" m_desc \""; + reply += buffer; + + reply += "\" "; + } + } + } + + SendData(user, NET_LOBBY_MISSION_LIST, reply); + + sprintf(buffer, "m_id 0x%08x", selected_mission); + SendData(user, NET_LOBBY_MISSION_SELECT, buffer); + } } void NetLobbyServer::DoMissionSelect(NetPeer* peer, Text msg) { - if (GetStatus() == NetServerInfo::PERSISTENT) - return; + if (GetStatus() == NetServerInfo::PERSISTENT) + return; - NetUser* user = FindUserByNetID(peer->NetID()); + NetUser* user = FindUserByNetID(peer->NetID()); - if (user && user->IsHost() && user->IsAuthOK()) { - List params; - ParseMsg(msg, params); + if (user && user->IsHost() && user->IsAuthOK()) { + List params; + ParseMsg(msg, params); - for (int i = 0; i < params.size(); i++) { - NetLobbyParam* p = params[i]; + for (int i = 0; i < params.size(); i++) { + NetLobbyParam* p = params[i]; - int num = 0; - sscanf(p->value, "0x%x", &num); + int num = 0; + sscanf(p->value, "0x%x", &num); - if (p->name == "m_id") { - SelectMission(num); - } - } + if (p->name == "m_id") { + SelectMission(num); + } + } - params.destroy(); - } + params.destroy(); + } } void NetLobbyServer::DoMissionData(NetPeer* peer, Text msg) { - NetUser* user = FindUserByNetID(peer->NetID()); - - if (user && mission && user->IsAuthOK()) { - Text reply = Serialize(mission, user); - SendData(user, NET_LOBBY_MISSION_DATA, reply); - - FILE* f = ::fopen("multi_mission_send.def", "w"); - if (f) { - ::fwrite(reply.data(), reply.length(), 1, f); - ::fclose(f); - } - } + NetUser* user = FindUserByNetID(peer->NetID()); + + if (user && mission && user->IsAuthOK()) { + Text reply = Serialize(mission, user); + SendData(user, NET_LOBBY_MISSION_DATA, reply); + + FILE* f = ::fopen("multi_mission_send.def", "w"); + if (f) { + ::fwrite(reply.data(), reply.length(), 1, f); + ::fclose(f); + } + } } void NetLobbyServer::DoUnitList(NetPeer* peer, Text msg) { - NetUser* user = FindUserByNetID(peer->NetID()); + NetUser* user = FindUserByNetID(peer->NetID()); - if (user && unit_map.size() && user->IsAuthOK()) { - Text reply; + if (user && unit_map.size() && user->IsAuthOK()) { + Text reply; - ListIter iter = GetUnitMap(); - while (++iter) { - NetUnitEntry* unit = iter.value(); - reply += unit->GetDescription(); - } + ListIter iter = GetUnitMap(); + while (++iter) { + NetUnitEntry* unit = iter.value(); + reply += unit->GetDescription(); + } - SendData(user, NET_LOBBY_UNIT_LIST, reply); - } + SendData(user, NET_LOBBY_UNIT_LIST, reply); + } } void NetLobbyServer::DoMapUnit(NetPeer* peer, Text msg) { - NetUser* user = FindUserByNetID(peer->NetID()); + NetUser* user = FindUserByNetID(peer->NetID()); - if (user && unit_map.size() && user->IsAuthOK()) { - List params; - ParseMsg(msg, params); + if (user && unit_map.size() && user->IsAuthOK()) { + List params; + ParseMsg(msg, params); - int id = 0; - bool lock = false; - Text user_name; + int id = 0; + bool lock = false; + Text user_name; - for (int i = 0; i < params.size(); i++) { - NetLobbyParam* p = params[i]; + for (int i = 0; i < params.size(); i++) { + NetLobbyParam* p = params[i]; - if (p->name == "id") { - sscanf(p->value, "%d", &id); - } + if (p->name == "id") { + sscanf(p->value, "%d", &id); + } - else if (p->name == "user") { - user_name = p->value; - } + else if (p->name == "user") { + user_name = p->value; + } - else if (p->name == "lock") { - lock = (p->value == "true") ? true : false; - } - } + else if (p->name == "lock") { + lock = (p->value == "true") ? true : false; + } + } - params.destroy(); + params.destroy(); - MapUnit(id, user_name, lock); - } + MapUnit(id, user_name, lock); + } } void NetLobbyServer::DoGameStart(NetPeer* peer, Text msg) { - GameStart(); + GameStart(); } void NetLobbyServer::DoGameStop(NetPeer* peer, Text msg) { - NetUser* user = FindUserByNetID(peer->NetID()); + NetUser* user = FindUserByNetID(peer->NetID()); - if (user && user->IsHost() && user->IsAuthOK()) - GameStop(); + if (user && user->IsHost() && user->IsAuthOK()) + GameStop(); } -- cgit v1.1