summaryrefslogtreecommitdiff
path: root/tracker/AdminServer/serverpage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tracker/AdminServer/serverpage.cpp')
-rw-r--r--tracker/AdminServer/serverpage.cpp906
1 files changed, 906 insertions, 0 deletions
diff --git a/tracker/AdminServer/serverpage.cpp b/tracker/AdminServer/serverpage.cpp
new file mode 100644
index 0000000..4677715
--- /dev/null
+++ b/tracker/AdminServer/serverpage.cpp
@@ -0,0 +1,906 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// The copyright to the contents herein is the property of Valve, L.L.C.
+// The contents may be used and/or copied only with the written permission of
+// Valve, L.L.C., or in accordance with the terms and conditions stipulated in
+// the agreement/contract under which the contents have been supplied.
+//
+// Purpose:
+//
+// $Workfile: $
+// $Date: $
+//
+//-----------------------------------------------------------------------------
+// $Log: $
+//
+// $NoKeywords: $
+//=============================================================================
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <assert.h>
+
+// base vgui interfaces
+#include <VGUI_Controls.h>
+#include <VGUI_IInput.h>
+#include <VGUI_ISurface.h>
+#include <VGUI_IScheme.h>
+#include <VGUI_IVGui.h>
+#include <VGUI_MouseCode.h>
+#include "filesystem.h"
+
+
+// vgui controls
+#include <VGUI_Button.h>
+#include <VGUI_CheckButton.h>
+#include <VGUI_ComboBox.h>
+#include <VGUI_FocusNavGroup.h>
+#include <VGUI_Frame.h>
+#include <VGUI_KeyValues.h>
+#include <VGUI_ListPanel.h>
+#include <VGUI_MessageBox.h>
+#include <VGUI_Panel.h>
+#include <VGUI_PropertySheet.h>
+#include <VGUI_ToggleButton.h>
+#include <VGUI_QueryBox.h>
+
+
+// serverbrowser headers
+#include "inetapi.h"
+//#include "msgbuffer.h"
+#include "proto_oob.h"
+#include "ServerContextMenu.h"
+#include "socket.h"
+#include "util.h"
+#include "vinternetdlg.h"
+#include "dialogcvarchange.h"
+//#include "ModList.h"
+#include "DialogGameInfo.h"
+#include "ConfigPanel.h"
+
+
+// game list
+#include "FavoriteGames.h"
+#include "GamePanelInfo.h"
+
+// tracker stuff
+//#include "Tracker.h"
+#include "TrackerProtocol.h"
+//#include "OnlineStatus.h"
+
+
+// interface to game engine / tracker
+#include "IRunGameEngine.h"
+
+using namespace vgui;
+
+static VInternetDlg *s_InternetDlg = NULL;
+CSysModule * g_hTrackerNetModule = NULL;
+
+//-----------------------------------------------------------------------------
+// Purpose: Constructor
+//-----------------------------------------------------------------------------
+VInternetDlg::VInternetDlg( unsigned int userid ) : Frame(NULL, "VInternetDlg")
+{
+ s_InternetDlg = this;
+
+ m_iUserID=userid;
+ m_bLoggedIn=false;
+
+ MakePopup();
+
+ m_pSavedData = NULL;
+
+ // create the controls
+ m_pContextMenu = new CServerContextMenu(this);
+// m_pContextMenu->SetVisible(false);
+
+ m_pFavoriteGames = new CFavoriteGames(this);
+
+ SetMinimumSize(570, 550);
+
+ m_pGameList = m_pFavoriteGames;
+
+ // property sheet
+ m_pTabPanel = new PropertySheet(this, "GameTabs");
+
+ m_pTabPanel->SetTabWidth(150);
+// m_pTabPanel->SetScrolling(true);
+ m_pTabPanel->AddPage(m_pFavoriteGames, "My Servers");
+ m_pTabPanel->AddActionSignalTarget(this);
+
+ m_pStatusLabel = new Label(this, "StatusLabel", "");
+
+ LoadControlSettings("Admin\\DialogAdminServer.res");
+
+ m_pStatusLabel->SetText("");
+
+
+ // Setup tracker objects
+ // tracker doc
+ //g_pTrackerDoc = new CTrackerDoc();
+
+ // create the networking
+ /*m_pServerSession = new CServerSession();
+
+ // load networking dll
+ char szDLL[_MAX_PATH];
+
+ // now load the net interface so we can use it
+ g_pFullFileSystem->GetLocalPath("Friends/TrackerNET.dll", szDLL);
+ g_pFullFileSystem->GetLocalCopy(szDLL);
+ g_hTrackerNetModule = Sys_LoadModule(szDLL);
+
+ CreateInterfaceFn netFactory = Sys_GetFactory(g_hTrackerNetModule);
+ m_pNet = (ITrackerNET *)netFactory(TRACKERNET_INTERFACE_VERSION, NULL);
+
+ m_pNet->Initialize(27030, 27100);
+ m_iServerAddr=m_pNet->GetNetAddress("tracker3.valvesoftware.com:1200");
+
+ // uncomment this to do the "tracker" magic
+ //SendInitialLogin();
+ */
+
+ // load filters
+ LoadFilters();
+ // load window settings
+ LoadDialogState(this, "AdminServer");
+
+ // let us be ticked every frame
+ ivgui()->AddTickSignal(this->GetVPanel());
+
+
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Destructor
+//-----------------------------------------------------------------------------
+VInternetDlg::~VInternetDlg()
+{
+ // set a flag indicating the threads should kill themselves
+// m_pNet->Shutdown(false);
+// m_pNet->deleteThis();
+// m_pNet = NULL;
+
+ Sys_UnloadModule(g_hTrackerNetModule);
+
+
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Called once to set up
+//-----------------------------------------------------------------------------
+void VInternetDlg::Initialize()
+{
+ SetTitle("Admin", true);
+ SetVisible(false);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : serverID -
+// Output : serveritem_t
+//-----------------------------------------------------------------------------
+serveritem_t &VInternetDlg::GetServer(unsigned int serverID)
+{
+ return m_pGameList->GetServer(serverID);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void VInternetDlg::Open( void )
+{
+ m_pTabPanel->RequestFocus();
+ // if serverbrowser file is not there we will try to transfer the favorites list.
+ FileHandle_t f = g_pFullFileSystem->Open("AdminServer.vdf", "rb");
+ if (f)
+ {
+ g_pFullFileSystem->Close( f );
+ }
+
+
+ surface()->SetMinimized(GetVPanel(), false);
+ SetVisible(true);
+ RequestFocus();
+ m_pTabPanel->RequestFocus();
+ MoveToFront();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: relayouts the dialogs controls
+//-----------------------------------------------------------------------------
+void VInternetDlg::PerformLayout()
+{
+ BaseClass::PerformLayout();
+
+ int x, y, wide, tall;
+ GetClientArea(x, y, wide, tall);
+
+ // game list in middle
+ m_pTabPanel->SetBounds(8, y + 8, GetWide() - 16, tall - (28));
+ x += 4;
+
+ // status text along bottom
+ m_pStatusLabel->SetBounds(x + 2, (tall - y) + 40, wide - 6, 20);
+ m_pStatusLabel->SetContentAlignment(Label::a_northwest);
+
+ Repaint();
+
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void VInternetDlg::OnClose()
+{
+ // bug here if you exit before logging in.
+ SaveDialogState(this, "AdminServer");
+ SaveFilters();
+ Frame::OnClose();
+
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Loads filter settings from disk
+//-----------------------------------------------------------------------------
+void VInternetDlg::LoadFilters()
+{
+ // free any old filters
+ if (m_pSavedData)
+ {
+ m_pSavedData->deleteThis();
+ }
+
+ m_pSavedData = new KeyValues ("Filters");
+ if (!m_pSavedData->LoadFromFile(g_pFullFileSystem, "Admin\\AdminServer.vdf", true, "PLATFORM"))
+ {
+ // file not successfully loaded, create the default key
+ m_pSavedData->FindKey("List", true);
+ m_pSavedData->FindKey("List/Default", true);
+ m_pSavedData->SetString("DefaultFilter", "Default");
+ }
+
+ // load favorite servers
+ KeyValues *favorites = m_pSavedData->FindKey("Favorites", true);
+ m_bSaveRcon= m_pSavedData->FindKey("SaveRcon", true)->GetInt();
+
+ m_pFavoriteGames->LoadFavoritesList(favorites,m_bSaveRcon);
+
+ m_bAutoRefresh= m_pSavedData->FindKey("AutoRefresh", true)->GetInt();
+ if(!m_bAutoRefresh)
+ {
+ m_iRefreshTime=0;
+ }
+ else
+ {
+ m_iRefreshTime= m_pSavedData->FindKey("RefreshTime", true)->GetInt();
+ }
+
+ m_bGraphs= m_pSavedData->FindKey("ShowGraphs", true)->GetInt();
+ if(!m_bGraphs)
+ {
+ m_iGraphsRefreshTime=0;
+ }
+ else
+ {
+ m_iGraphsRefreshTime= m_pSavedData->FindKey("GraphsRefreshTime", true)->GetInt();
+ }
+
+ m_bDoLogging= m_pSavedData->FindKey("GetLogs", true)->GetInt();
+
+
+ m_pTabPanel->SetActivePage(m_pFavoriteGames);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void VInternetDlg::SaveFilters()
+{
+
+ // get the favorites list
+ KeyValues *favorites = m_pSavedData->FindKey("Favorites", true);
+ m_pFavoriteGames->SaveFavoritesList(favorites,m_bSaveRcon);
+ m_pSavedData->SaveToFile(g_pFullFileSystem, "Admin\\AdminServer.vdf", "PLATFORM");
+
+}
+
+void VInternetDlg::SetConfig(bool autorefresh,bool savercon,int refreshtime,bool graphs,int graphsrefreshtime,bool getlogs)
+{
+ m_bAutoRefresh=autorefresh;
+ m_bDoLogging = getlogs;
+ m_bSaveRcon=savercon;
+ if(m_bAutoRefresh)
+ {
+ m_iRefreshTime=refreshtime;
+ }
+ else
+ {
+ m_iRefreshTime=0;
+ }
+
+ m_bGraphs = graphs;
+ if(graphs)
+ {
+ m_iGraphsRefreshTime=graphsrefreshtime;
+ }
+ else
+ {
+ m_iGraphsRefreshTime=0;
+ }
+
+ m_pSavedData->SetInt("AutoRefresh",autorefresh);
+ m_pSavedData->SetInt("SaveRcon",savercon);
+ m_pSavedData->SetInt("RefreshTime",refreshtime);
+ m_pSavedData->SetInt("GraphsRefreshTime",graphsrefreshtime);
+ m_pSavedData->SetInt("ShowGraphs",graphs);
+ m_pSavedData->SetInt("GetLogs",getlogs);
+
+
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Updates status test at bottom of window
+// Input : *fmt -
+// ... -
+//-----------------------------------------------------------------------------
+void VInternetDlg::UpdateStatusText(const char *fmt, ...)
+{
+ if ( !m_pStatusLabel )
+ return;
+
+ char str[ 1024 ];
+ va_list argptr;
+ va_start( argptr, fmt );
+ vsprintf( str, fmt, argptr );
+ va_end( argptr );
+
+ m_pStatusLabel->SetText( str );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: returns a pointer to a static instance of this dialog
+// Output : VInternetDlg
+//----------------------------------------------------------------------------
+VInternetDlg *VInternetDlg::GetInstance()
+{
+ return s_InternetDlg;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Output : CServerContextMenu
+//-----------------------------------------------------------------------------
+CServerContextMenu *VInternetDlg::GetContextMenu()
+{
+ return m_pContextMenu;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: begins the process of joining a server from a game list
+// the game info dialog it opens will also update the game list
+//-----------------------------------------------------------------------------
+CDialogGameInfo *VInternetDlg::JoinGame(IGameList *gameList, unsigned int serverIndex)
+{
+ // open the game info dialog, then mark it to attempt to connect right away
+ CDialogGameInfo *gameDialog = OpenGameInfoDialog(gameList, serverIndex);
+
+ // set the dialog name to be the server name
+ gameDialog->Connect();
+
+ return gameDialog;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: joins a game by a specified IP, not attached to any game list
+//-----------------------------------------------------------------------------
+CDialogGameInfo *VInternetDlg::JoinGame(int serverIP, int serverPort, const char *titleName)
+{
+ // open the game info dialog, then mark it to attempt to connect right away
+ CDialogGameInfo *gameDialog = OpenGameInfoDialog(serverIP, serverPort, titleName);
+
+ // set the dialog name to be the server name
+ gameDialog->Connect();
+
+ return gameDialog;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: opens a game info dialog from a game list
+//-----------------------------------------------------------------------------
+CDialogGameInfo *VInternetDlg::OpenGameInfoDialog(IGameList *gameList, unsigned int serverIndex)
+{
+ CDialogGameInfo *gameDialog = new CDialogGameInfo(gameList, serverIndex);
+ serveritem_t &server = gameList->GetServer(serverIndex);
+ gameDialog->Run(server.name);
+ return gameDialog;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: opens a game info dialog by a specified IP, not attached to any game list
+//-----------------------------------------------------------------------------
+CDialogGameInfo *VInternetDlg::OpenGameInfoDialog(int serverIP, int serverPort, const char *titleName)
+{
+ CDialogGameInfo *gameDialog = new CDialogGameInfo(NULL, 0, serverIP, serverPort);
+ gameDialog->Run(titleName);
+ return gameDialog;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Save position and window size of a dialog from the .vdf file.
+// Input : *dialog - panel we are setting position and size
+// *dialogName - name of dialog in the .vdf file
+//-----------------------------------------------------------------------------
+void VInternetDlg::SaveDialogState(Panel *dialog, const char *dialogName)
+{
+ // write the size and position to the document
+ int x, y, wide, tall;
+ dialog->GetBounds(x, y, wide, tall);
+
+ KeyValues *data;
+ data = m_pSavedData->FindKey(dialogName, true);
+
+ data->SetInt("x", x);
+ data->SetInt("y", y);
+ data->SetInt("w", wide);
+ data->SetInt("t", tall);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Load position and window size of a dialog from the .vdf file.
+// Input : *dialog - panel we are setting position and size
+// *dialogName - name of dialog in the .vdf file
+//-----------------------------------------------------------------------------
+void VInternetDlg::LoadDialogState(Panel *dialog, const char *dialogName)
+{
+ // read the size and position from the document
+ KeyValues *data;
+ data = m_pSavedData->FindKey(dialogName, true);
+
+ // calculate defaults, center of the screen
+ int x, y, wide, tall, dwide, dtall;
+ int nx, ny, nwide, ntall;
+ vgui::surface()->GetScreenSize(wide, tall);
+ dialog->GetSize(dwide, dtall);
+ x = (int)((wide - dwide) * 0.5);
+ y = (int)((tall - dtall) * 0.5);
+
+ // set dialog
+ nx = data->GetInt("x", x);
+ ny = data->GetInt("y", y);
+ nwide = data->GetInt("w", dwide);
+ ntall = data->GetInt("t", dtall);
+
+ // make sure it's on the screen. If it isn't, move it over so it is.
+ if (nx + nwide > wide)
+ {
+ nx = wide - nwide;
+ }
+ if (ny + ntall > tall)
+ {
+ ny = tall - ntall;
+ }
+ if (nx < 0)
+ {
+ nx = 0;
+ }
+ if (ny < 0)
+ {
+ ny = 0;
+ }
+
+ dialog->SetBounds(nx, ny, nwide, ntall);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : *dest -
+// *src -
+// bufsize -
+//-----------------------------------------------------------------------------
+void v_strncpy(char *dest, const char *src, int bufsize)
+{
+ if (src == dest)
+ return;
+
+ strncpy(dest, src, bufsize - 1);
+ dest[bufsize - 1] = 0;
+}
+
+void VInternetDlg::ConfigPanel()
+{
+ CConfigPanel *config = new CConfigPanel(m_bAutoRefresh,m_bSaveRcon,m_iRefreshTime,m_bGraphs,m_iGraphsRefreshTime,m_bDoLogging);
+ config->Run();
+}
+
+void VInternetDlg::OnManageServer(int serverID)
+{
+ int i;
+ serveritem_t &server = m_pFavoriteGames->GetServer(serverID);
+ netadr_t addr;
+ memcpy(addr.ip,server.ip,4);
+ addr.port=(server.port & 0xff) << 8 | (server.port & 0xff00) >> 8;
+ addr.type=NA_IP;
+
+ const char *netString = net->AdrToString(&addr);
+ char tabName[20];
+
+ for(i=0;i<m_pTabPanel->GetNumPages();i++)
+ {
+
+ m_pTabPanel->GetTabTitle(i,tabName,20);
+ if(!stricmp(netString,tabName))
+ {
+ break;
+ }
+ }
+
+ if(i==m_pTabPanel->GetNumPages())
+ {
+
+ if(m_bSaveRcon)
+ { // rcons are being saved
+ if(strlen(server.rconPassword)>0)
+ { // this rcon password is already saved :)
+ ManageServer(serverID,server.rconPassword);
+ return;
+ }
+ }
+
+ // otherwise ask for an rcon password
+ CDialogCvarChange *box = new CDialogCvarChange();
+ char id[5];
+ _snprintf(id,5,"%i",serverID);
+ box->AddActionSignalTarget(this);
+ box->SetTitle("Enter Rcon Password",true);
+ box->SetLabelText("CvarNameLabel","");
+ box->SetLabelText("PasswordLabel","Password:");
+
+ box->MakePassword();
+ box->Activate(id, "","rconpassword","Enter Rcon Password for this Server");
+ }
+ else
+ {
+ m_pTabPanel->SetActivePage(m_pTabPanel->GetPage(i));
+ }
+}
+
+void VInternetDlg::OnPlayerDialog(vgui::KeyValues *data)
+{
+ const char *type=data->GetString("type");
+ const char *playerName=data->GetString("player");
+ if(!stricmp(type,"rconpassword"))
+ {
+ const char *value=data->GetString("value");
+ serveritem_t &server = m_pFavoriteGames->GetServer(atoi(playerName)); // we encode the serverid in the name field :)
+ strncpy(server.rconPassword,value,sizeof(server.rconPassword)); // save this password
+
+ ManageServer(atoi(playerName),value);
+ }
+}
+
+void VInternetDlg::ManageServer(int serverID,const char *pass)
+{
+ serveritem_t &server = m_pFavoriteGames->GetServer(serverID);
+ netadr_t addr;
+ memcpy(addr.ip,server.ip,4);
+ addr.port=(server.port & 0xff) << 8 | (server.port & 0xff00) >> 8;
+ addr.type=NA_IP;
+
+ m_pGamePanelInfo = new CGamePanelInfo(this,"Current Server",server.gameDir,m_iRefreshTime,m_iGraphsRefreshTime,m_bDoLogging);
+
+ m_pTabPanel->AddPage(m_pGamePanelInfo,net->AdrToString(&addr) );
+
+ m_pGamePanelInfo->ChangeGame(server,pass);
+ m_pTabPanel->SetActivePage(m_pGamePanelInfo);
+}
+
+void VInternetDlg::UpdateServer(serveritem_t &server)
+{
+ m_pFavoriteGames->UpdateServer(server);
+}
+
+void VInternetDlg::OnDeleteServer(int chosenPanel)
+{
+ Panel *delPanel =m_pTabPanel->GetPage(chosenPanel);
+ m_pTabPanel->DeletePage(delPanel);
+
+ InvalidateLayout();
+ Repaint();
+
+}
+
+vgui::PropertySheet *VInternetDlg::GetTabPanel()
+{
+ return m_pTabPanel;
+}
+
+
+void VInternetDlg::OnOpenContextMenu()
+{
+// CServerContextMenu *menu = VInternetDlg::GetInstance()->GetContextMenu();
+ // no selected rows, so don't display default stuff in menu
+ if( m_pTabPanel->GetActiveTab()->IsCursorOver() ||
+ m_pFavoriteGames->IsCursorOver() )
+ {
+ m_pContextMenu->ShowMenu(this, -1, false, false, false,false);
+ }
+}
+
+
+
+
+
+
+
+
+void VInternetDlg::OnTick()
+{
+
+//FIX ME!!!
+ return;
+
+/*
+
+ // get the latest raw messages
+ IBinaryBuffer *buf;
+ CNetAddress address;
+ while ((buf = m_pNet->GetIncomingRawData(address)) != NULL)
+ {
+ //ReceivedRawData(buf, address);
+ buf->Release();
+ }
+
+ // get all the latest messages
+ IReceiveMessage *recv;
+ while ((recv = m_pNet->GetIncomingData()) != NULL)
+ {
+
+ // make sure the message is valid
+ if (!CheckMessageValidity(recv))
+ return;
+
+ // record the reception
+ // m_iLastReceivedTime = m_iTime;
+
+ // find the message id in the dispatch table
+ int dataName = recv->GetMsgID();
+
+
+
+ switch(dataName)
+ {
+ case TSVC_CHALLENGE:
+ {
+ int ChallengeKey;
+ int status = COnlineStatus::ONLINE;
+ int heartbeatRate =10000;//GetHeartBeatRate();
+
+ recv->ReadInt("challenge", ChallengeKey);
+ recv->ReadUInt("sessionID", m_iSessionID);
+ // respond to the challenge
+ ISendMessage *reply = CreateServerMessage(TCLS_RESPONSE);
+ reply->SetSessionID( m_iSessionID );
+
+
+
+ reply->WriteInt("challenge", ChallengeKey);
+ reply->WriteUInt("sessionID", m_iSessionID);
+ reply->WriteInt("status", status);
+ reply->WriteInt("build", 1994);
+ reply->WriteInt("hrate", heartbeatRate); // heartbeat rate to expect
+
+ //m_iPreviousHeartBeatRateSentToServer = heartbeatRate;
+
+ // reset the login timeout
+ //m_iLoginTimeout = system()->getTimeMillis() + COnlineStatus::SERVERCONNECT_TIMEOUT;
+
+ m_pNet->SendMessage(reply, NET_RELIABLE);
+
+ }
+ break;
+
+ case TSVC_LOGINOK:
+ {
+ int newStatus;
+ recv->ReadInt("status", newStatus);
+ m_bLoggedIn=true;
+
+ SearchForFriend(0, "[email protected]", "", "", "");
+
+ }
+ break;
+ case TSVC_FRIENDSFOUND:
+ {
+ //char name[60];
+
+ int serverID,sessionID;
+ recv->ReadInt("uid",m_iRemoteUID);
+ recv->ReadInt("serverid",serverID);
+ recv->ReadInt("sessionID",sessionID);
+
+
+
+ // create the message to the server
+ ISendMessage *msg = CreateServerMessage(TCLS_ROUTETOFRIEND);
+
+ // write in the redirection info
+ msg->WriteInt("rID", TCL_MESSAGE);
+ msg->WriteUInt("rUserID", m_iRemoteUID);
+ msg->WriteUInt("rSessionID", sessionID);
+ msg->WriteUInt("rServerID", serverID);
+ msg->WriteBlob("rData", "Hello", 5);
+
+ m_pNet->SendMessage(msg, NET_RELIABLE);
+
+ // lets log off
+ msg = CreateServerMessage(TCLS_HEARTBEAT);
+ msg->WriteInt("status", COnlineStatus::OFFLINE);
+ m_pNet->SendMessage(msg, NET_RELIABLE);
+
+ // m_pNet->Shutdown(true);
+ // m_pNet->deleteThis();
+ // SendStatusToServer(COnlineStatus::OFFLINE);
+
+ }
+ break;
+
+ default:
+ {
+ while(recv->AdvanceField())
+ {
+ char data[512];
+ const char *nm=recv->GetFieldName();
+ recv->ReadString(nm, data, 512);
+
+ }
+ }
+
+ break;
+
+
+ // { TSVC_CHALLENGE, CServerSession::ReceivedMsg_Challenge },
+ // { TSVC_LOGINOK, CServerSession::ReceivedMsg_LoginOK },
+ // { TSVC_LOGINFAIL, CServerSession::ReceivedMsg_LoginFail },
+ // { TSVC_DISCONNECT, CServerSession::ReceivedMsg_Disconnect },
+ // { TSVC_FRIENDS, CServerSession::ReceivedMsg_Friends },
+ // { TSVC_FRIENDUPDATE, CServerSession::ReceivedMsg_FriendUpdate },
+ // { TSVC_GAMEINFO, CServerSession::ReceivedMsg_GameInfo },
+ // { TSVC_HEARTBEAT, CServerSession::ReceivedMsg_Heartbeat },
+ // { TSVC_PINGACK, CServerSession::ReceivedMsg_PingAck },
+
+
+ //default:
+ // break;
+
+ }
+ //ReceivedData(recv);
+ m_pNet->ReleaseMessage(recv);
+ }
+
+
+ // get the latest fails
+ while ((recv = m_pNet->GetFailedMessage()) != NULL)
+ {
+
+
+ m_pNet->ReleaseMessage(recv);
+ }
+
+ // now let it update itself
+ m_pNet->RunFrame();
+ */
+}
+
+void VInternetDlg::SearchForFriend(unsigned int uid, const char *email, const char *username, const char *firstname, const char *lastname)
+{
+ ISendMessage *msg = CreateServerMessage(TCLS_FRIENDSEARCH);
+ msg->WriteUInt("uid", uid);
+ msg->WriteString("Email", email);
+ msg->WriteString("UserName", username);
+ msg->WriteString("FirstName", firstname);
+ msg->WriteString("LastName", lastname);
+
+ m_pNet->SendMessage(msg, NET_RELIABLE);
+}
+
+ISendMessage *VInternetDlg::CreateServerMessage(int msgID)
+{
+ ISendMessage *msg = m_pNet->CreateMessage(msgID);
+ msg->SetNetAddress(GetServerAddress());
+ msg->SetSessionID(m_iSessionID);
+ msg->SetEncrypted(true);
+
+ return msg;
+}
+
+CNetAddress VInternetDlg::GetServerAddress()
+{
+ return m_iServerAddr;// m_pNet->GetNetAddress("tracker.valvesoftware.com:1200");
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sends the first pack in the login sequence
+//-----------------------------------------------------------------------------
+void VInternetDlg::SendInitialLogin()
+{
+// assert(m_iLoginState == LOGINSTATE_WAITINGTORECONNECT || m_iLoginState == LOGINSTATE_DISCONNECTED);
+
+ m_iSessionID = 0;
+
+ // stop searching for alternate servers
+// m_bServerSearch = false;
+
+// int desiredStatus = COnlineStatus::ONLINE;
+
+
+ // setup the login message
+/* ISendMessage *loginMsg = m_pNet->CreateMessage(TCLS_LOGIN);
+ loginMsg->SetNetAddress(GetServerAddress());
+ loginMsg->SetEncrypted(true);
+ loginMsg->SetSessionID(0);
+
+// const char *adr= GetServerAddress().ToStaticString();
+
+ loginMsg->WriteUInt("uid", 36283);
+ loginMsg->WriteString("email", "[email protected]");
+ loginMsg->WriteString("password", "mrorange");
+ loginMsg->WriteInt("status", desiredStatus);
+
+ m_pNet->SendMessage(loginMsg, NET_RELIABLE);
+*/
+ // set the current status to be a connecting message
+// m_iStatus = COnlineStatus::CONNECTING;
+
+// m_iLoginState = LOGINSTATE_AWAITINGCHALLENGE;
+ // record the time (for timeouts)
+// m_iLoginTimeout = system()->getTimeMillis() + COnlineStatus::SERVERCONNECT_TIMEOUT;
+
+
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Checks to see if the current message is valid
+// replies with a message telling the sender if it's not
+//-----------------------------------------------------------------------------
+bool VInternetDlg::CheckMessageValidity(IReceiveMessage *dataBlock)
+{
+ int msgID = dataBlock->GetMsgID();
+ if (msgID == TSVC_FRIENDS || msgID == TSVC_GAMEINFO || msgID == TSVC_HEARTBEAT || msgID == TSVC_FRIENDUPDATE)
+ {
+ // see if the server really knows us
+ if (/*m_iStatus < COnlineStatus::ONLINE ||*/ m_iSessionID != dataBlock->SessionID())
+ {
+ // the server thinks we're still logged on to it
+ // tell the server we're actually logged off from it
+ ISendMessage *msg = m_pNet->CreateReply(TCLS_HEARTBEAT, dataBlock);
+ // tell it we're the sessionID it thinks we are
+ msg->SetSessionID(dataBlock->SessionID());
+ msg->WriteInt("status", 0);
+ m_pNet->SendMessage(msg, NET_RELIABLE);
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Message map
+//-----------------------------------------------------------------------------
+MessageMapItem_t VInternetDlg::m_MessageMap[] =
+{
+// MAP_MESSAGE( VInternetDlg, "PageChanged", OnGameListChanged ),
+ MAP_MESSAGE_INT( VInternetDlg, "Manage", OnManageServer, "serverID" ),
+ MAP_MESSAGE_PARAMS( VInternetDlg, "CvarChangeValue", OnPlayerDialog ),
+ MAP_MESSAGE_INT( VInternetDlg, "DeleteServer", OnDeleteServer, "panelid" ),
+ MAP_MESSAGE( VInternetDlg, "OpenContextMenu", OnOpenContextMenu ),
+};
+IMPLEMENT_PANELMAP(VInternetDlg, vgui::Frame);