123
This commit is contained in:
@@ -0,0 +1,829 @@
|
||||
// gsMasterServerLauncherDlg.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "gsMasterServerLauncher.h"
|
||||
#include "gsMasterServerLauncherDlg.h"
|
||||
//#include "GSHttpInterface.h"
|
||||
#include "wininet.h"
|
||||
#include "define.h"
|
||||
#include "LobbyDefines.h"
|
||||
#include "Registry.h"
|
||||
|
||||
extern HANDLE g_Mutex;
|
||||
bool g_bRun = GS_TRUE;
|
||||
|
||||
#include "version_manager.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
//UBI.COM: This thread just calls the Launcher_Engine function. We do have to
|
||||
// make sure no to call it at the same time as one of the other functions,
|
||||
// therefore we use a Mutex.
|
||||
DWORD ThreadEngine(void* pArg)
|
||||
{
|
||||
CGsMasterServerLauncherDlg *pDlg = (CGsMasterServerLauncherDlg*)pArg;
|
||||
while (true)
|
||||
{
|
||||
Sleep(10);
|
||||
LOCKMUTEX();
|
||||
pDlg->RegServer_Engine();
|
||||
UNLOCKMUTEX();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CGsMasterServerLauncherDlg dialog
|
||||
|
||||
CGsMasterServerLauncherDlg::CGsMasterServerLauncherDlg(CWnd* pParent /*=NULL*/)
|
||||
: CDialog(CGsMasterServerLauncherDlg::IDD, pParent)
|
||||
{
|
||||
//{{AFX_DATA_INIT(CGsMasterServerLauncherDlg)
|
||||
//}}AFX_DATA_INIT
|
||||
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
|
||||
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
||||
|
||||
m_iNbrGroups = 0;
|
||||
m_bLoggedIn = false;
|
||||
}
|
||||
|
||||
CGsMasterServerLauncherDlg::~CGsMasterServerLauncherDlg()
|
||||
{
|
||||
//UBI.COM: Stop the thread from calling Launcher_Engine;
|
||||
LOCKMUTEX();
|
||||
//RegServerLibrary_Uninitialize();
|
||||
}
|
||||
|
||||
void CGsMasterServerLauncherDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(CGsMasterServerLauncherDlg)
|
||||
DDX_Control(pDX, IDC_EDITAltData, m_editAltData);
|
||||
DDX_Control(pDX, IDC_EDITGamePort, m_editGamePort);
|
||||
DDX_Control(pDX, IDC_EDITLobbyPort, m_editLobbyPort);
|
||||
DDX_Control(pDX, IDC_EDITLobbyIP, m_editLobbyIP);
|
||||
DDX_Control(pDX, IDC_EDITGroupID, m_editGroupID);
|
||||
DDX_Control(pDX, IDC_EDITServerName, m_editServerName);
|
||||
DDX_Control(pDX, IDC_EDITMaxVisitors, m_editMaxVisitors);
|
||||
DDX_Control(pDX, IDC_EDITMaxPlayers, m_editMaxPlayers);
|
||||
DDX_Control(pDX, IDC_EDITGSVersion, m_editGSVersion);
|
||||
DDX_Control(pDX, IDC_EDITGrpData, m_editGrpData);
|
||||
DDX_Control(pDX, IDC_EDITGameVersion, m_editGameVersion);
|
||||
DDX_Control(pDX, IDC_EDITGamePassword, m_editGamePassword);
|
||||
DDX_Control(pDX, IDC_EDITGameData, m_editGameData);
|
||||
DDX_Control(pDX, IDC_COMBOServerType, m_cboServerType);
|
||||
DDX_Control(pDX, IDC_LISTGroups, m_listGroups);
|
||||
DDX_Control(pDX, IDC_EDITExtIP, m_editExtIP);
|
||||
DDX_Control(pDX, IDC_EDITVersion, m_editVersion);
|
||||
DDX_Control(pDX, IDC_EDITUsername, m_editUsername);
|
||||
DDX_Control(pDX, IDC_EDITPort, m_editPort);
|
||||
DDX_Control(pDX, IDC_EDITPassword, m_editPassword);
|
||||
DDX_Control(pDX, IDC_EDITIPAddress, m_editIPAddress);
|
||||
DDX_Control(pDX, IDC_EDITGameName, m_editGamename);
|
||||
//}}AFX_DATA_MAP
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CGsMasterServerLauncherDlg, CDialog)
|
||||
//{{AFX_MSG_MAP(CGsMasterServerLauncherDlg)
|
||||
ON_WM_PAINT()
|
||||
ON_WM_QUERYDRAGICON()
|
||||
ON_BN_CLICKED(IDC_BUTTONLogin, OnBUTTONLogin)
|
||||
ON_BN_CLICKED(IDC_BUTTONReqGroups, OnBUTTONReqGroups)
|
||||
ON_BN_CLICKED(IDC_BUTTONRegServer, OnBUTTONRegServer)
|
||||
ON_BN_CLICKED(IDC_BUTTONTermServer, OnBUTTONTermServer)
|
||||
ON_BN_CLICKED(IDC_BUTTONDisconnect, OnBUTTONDisconnect)
|
||||
ON_BN_CLICKED(IDC_BUTTONUpdate, OnBUTTONUpdate)
|
||||
ON_BN_CLICKED(IDC_BUTTONDownload, OnBUTTONDownload)
|
||||
ON_BN_CLICKED(IDC_BUTTONAbout, OnBUTTONAbout)
|
||||
ON_BN_CLICKED(IDC_BUTTONStartMatch, OnBUTTONStartMatch)
|
||||
ON_BN_CLICKED(IDC_BUTTONFinishMatch, OnBUTTONFinishMatch)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CGsMasterServerLauncherDlg message handlers
|
||||
|
||||
BOOL CGsMasterServerLauncherDlg::OnInitDialog()
|
||||
{
|
||||
CDialog::OnInitDialog();
|
||||
|
||||
// Set the icon for this dialog. The framework does this automatically
|
||||
// when the application's main window is not a dialog
|
||||
SetIcon(m_hIcon, TRUE); // Set big icon
|
||||
SetIcon(m_hIcon, FALSE); // Set small icon
|
||||
|
||||
// TODO: Add extra initialization here
|
||||
|
||||
//UBI.COM: Initialize the library
|
||||
//RegServerLibrary_Initialize();
|
||||
|
||||
char szUsername[NICKNAMELENGTH],szGamename[GAMELENGTH],szPassword[PASSWORDLENGTH];
|
||||
char szVersion[VERSIONLENGTH];
|
||||
char szServerIP[IPADDRESSLENGTH],szServerPort[100];
|
||||
|
||||
char szDirectory[1024];
|
||||
GetCurrentDirectory(1024,szDirectory);
|
||||
|
||||
CString csLauncherIniFile = szDirectory;
|
||||
csLauncherIniFile += "\\Launcher.ini";
|
||||
|
||||
GetPrivateProfileString("Launcher","Username",
|
||||
"user10",szUsername,NICKNAMELENGTH,csLauncherIniFile);
|
||||
GetPrivateProfileString("Launcher","Gamename",
|
||||
"GHOSTRECON",szGamename,GAMELENGTH,csLauncherIniFile);
|
||||
GetPrivateProfileString("Launcher","Password",
|
||||
"testtest",szPassword,PASSWORDLENGTH,csLauncherIniFile);
|
||||
GetPrivateProfileString("Launcher","Version",
|
||||
"PC4.2",szVersion,VERSIONLENGTH,csLauncherIniFile);
|
||||
GetPrivateProfileString("Launcher","ServerIP",
|
||||
"",szServerIP,IPADDRESSLENGTH,csLauncherIniFile);
|
||||
GetPrivateProfileString("Launcher","ServerPort",
|
||||
"",szServerPort,100,csLauncherIniFile);
|
||||
|
||||
m_editGamename.SetWindowText(szGamename);
|
||||
m_editIPAddress.SetWindowText(szServerIP);
|
||||
m_editPassword.SetWindowText(szPassword);
|
||||
m_editPort.SetWindowText(szServerPort);
|
||||
m_editVersion.SetWindowText(szVersion);
|
||||
m_editUsername.SetWindowText(szUsername);
|
||||
|
||||
char szServerName[NAMELENGTH],szMaxPlayers[100],szMaxVisitors[100];
|
||||
int iServerType;
|
||||
char szGamePassword[PASSWORDLENGTH],szGroupData[100];
|
||||
char szGameData[100],szGameVersion[VERSIONLENGTH];
|
||||
char szGSVersion[VERSIONLENGTH];
|
||||
char szGamePort[100];
|
||||
|
||||
GetPrivateProfileString("GameServer","Name",
|
||||
"Test Server",szServerName,NAMELENGTH,csLauncherIniFile);
|
||||
iServerType = GetPrivateProfileInt("GameServer","Type",
|
||||
0,csLauncherIniFile);
|
||||
GetPrivateProfileString("GameServer","MaxPlayers",
|
||||
"4",szMaxPlayers,100,csLauncherIniFile);
|
||||
GetPrivateProfileString("GameServer","MaxVisitors",
|
||||
"0",szMaxVisitors,100,csLauncherIniFile);
|
||||
GetPrivateProfileString("GameServer","Password",
|
||||
"",szGamePassword,PASSWORDLENGTH,csLauncherIniFile);
|
||||
GetPrivateProfileString("GameServer","GroupData",
|
||||
"123",szGroupData,100,csLauncherIniFile);
|
||||
GetPrivateProfileString("GameServer","GameData",
|
||||
"456",szGameData,100,csLauncherIniFile);
|
||||
GetPrivateProfileString("GameServer","GameVersion",
|
||||
"1.0",szGameVersion,VERSIONLENGTH,csLauncherIniFile);
|
||||
GetPrivateProfileString("GameServer","GSVersion",
|
||||
"2.0",szGSVersion,VERSIONLENGTH,csLauncherIniFile);
|
||||
GetPrivateProfileString("GameServer","GamePort",
|
||||
"6667",szGamePort,100,csLauncherIniFile);
|
||||
|
||||
|
||||
m_editServerName.SetWindowText(szServerName);
|
||||
m_cboServerType.SetCurSel(iServerType);
|
||||
m_editMaxPlayers.SetWindowText(szMaxPlayers);
|
||||
m_editMaxVisitors.SetWindowText(szMaxVisitors);
|
||||
m_editGamePassword.SetWindowText(szGamePassword);
|
||||
m_editGrpData.SetWindowText(szGroupData);
|
||||
m_editGameData.SetWindowText(szGameData);
|
||||
m_editGameVersion.SetWindowText(szGameVersion);
|
||||
m_editGSVersion.SetWindowText(szGSVersion);
|
||||
m_editGamePort.SetWindowText(szGamePort);
|
||||
|
||||
|
||||
m_listGroups.InsertColumn(0,"Server ID",LVCFMT_LEFT,60);
|
||||
m_listGroups.InsertColumn(1,"Group ID",LVCFMT_LEFT,60);
|
||||
m_listGroups.InsertColumn(2,"Group Name",LVCFMT_LEFT,75);
|
||||
m_listGroups.InsertColumn(3,"Players",LVCFMT_LEFT,47);
|
||||
m_listGroups.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
||||
|
||||
//UBI.COM: Create the thread that keeps calling Launcher_Engine
|
||||
DWORD iThread;
|
||||
CreateThread(NULL,0,ThreadEngine,this,0,&iThread);
|
||||
|
||||
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
}
|
||||
|
||||
// If you add a minimize button to your dialog, you will need the code below
|
||||
// to draw the icon. For MFC applications using the document/view model,
|
||||
// this is automatically done for you by the framework.
|
||||
|
||||
void CGsMasterServerLauncherDlg::OnPaint()
|
||||
{
|
||||
if (IsIconic())
|
||||
{
|
||||
CPaintDC dc(this); // device context for painting
|
||||
|
||||
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
|
||||
|
||||
// Center icon in client rectangle
|
||||
int cxIcon = GetSystemMetrics(SM_CXICON);
|
||||
int cyIcon = GetSystemMetrics(SM_CYICON);
|
||||
CRect rect;
|
||||
GetClientRect(&rect);
|
||||
int x = (rect.Width() - cxIcon + 1) / 2;
|
||||
int y = (rect.Height() - cyIcon + 1) / 2;
|
||||
|
||||
// Draw the icon
|
||||
dc.DrawIcon(x, y, m_hIcon);
|
||||
}
|
||||
else
|
||||
{
|
||||
CDialog::OnPaint();
|
||||
}
|
||||
}
|
||||
|
||||
// The system calls this to obtain the cursor to display while the user drags
|
||||
// the minimized window.
|
||||
HCURSOR CGsMasterServerLauncherDlg::OnQueryDragIcon()
|
||||
{
|
||||
return (HCURSOR) m_hIcon;
|
||||
}
|
||||
|
||||
|
||||
//UBI.COM: Receive the LoginRouter result
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LoginRouterResult(GSubyte ucType, GSint lReason,
|
||||
const GSchar *szIPAddress)
|
||||
{
|
||||
if (ucType == GSSUCCESS)
|
||||
{
|
||||
MessageBox("Login Successful");
|
||||
m_editExtIP.SetWindowText(szIPAddress);
|
||||
m_bLoggedIn = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
char szText[100];
|
||||
sprintf(szText,"Login Failed: %i",lReason);
|
||||
MessageBox(szText);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//UBI.COM: Receive a disconnection from the Router
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_RouterDisconnection()
|
||||
{
|
||||
MessageBox("Login Disconnected");
|
||||
m_bLoggedIn = false;
|
||||
}
|
||||
|
||||
//UBI.COM: Receive a RegisterServer result
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_RegisterServerResult(GSubyte ucType,GSint lReason,
|
||||
GSint iGroupID,const GSchar *szAddress,GSushort usPort,const GSchar *szSessionName)
|
||||
{
|
||||
if (ucType == GSFAIL)
|
||||
{
|
||||
char szText[100];
|
||||
sprintf(szText,"Register Failed: %i",lReason);
|
||||
MessageBox(szText);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int iConfig,iMaxPlayers,iMaxVisitors,iGroupDataSize,iGameDataSize;
|
||||
char szGroupData[100],szGameData[100],szPassword[PASSWORDLENGTH];
|
||||
char szText[100], szUsername[NICKNAMELENGTH];
|
||||
|
||||
MessageBox("Register Server Sucessful");
|
||||
|
||||
m_editGroupID.SetWindowText(ltoa(iGroupID,szText,10));
|
||||
m_editLobbyIP.SetWindowText(szAddress);
|
||||
m_editLobbyPort.SetWindowText(ltoa(usPort,szText,10));
|
||||
m_editServerName.SetWindowText(szSessionName);
|
||||
|
||||
|
||||
iConfig = 0;
|
||||
|
||||
m_editMaxPlayers.GetWindowText(szText,100);
|
||||
iMaxPlayers = atol(szText);
|
||||
|
||||
m_editMaxVisitors.GetWindowText(szText,100);
|
||||
iMaxVisitors = atol(szText);
|
||||
|
||||
m_editGamePassword.GetWindowText(szPassword,100);
|
||||
|
||||
m_editGrpData.GetWindowText(szGroupData,100);
|
||||
iGroupDataSize = strlen(szGroupData) + 1;
|
||||
|
||||
m_editGameData.GetWindowText(szGameData,100);
|
||||
iGameDataSize = strlen(szGameData) + 1;
|
||||
|
||||
m_editUsername.GetWindowText(szUsername,NICKNAMELENGTH);
|
||||
|
||||
LOCKMUTEX();
|
||||
|
||||
if (!RegServerSend_LobbyServerConnection(szAddress, usPort))
|
||||
MessageBox("RegServerSend_LobbyServerConnection failed");
|
||||
else
|
||||
RegServerSend_LobbyServerLogin(szUsername, iGroupID);
|
||||
|
||||
UNLOCKMUTEX();
|
||||
|
||||
}
|
||||
|
||||
//UBI.COM: Receive a TerminateServer Result
|
||||
/*GSvoid CGsMasterServerLauncherDlg::LauncherRcv_TerminateServerResult(GSubyte ucType, GSint lReason)
|
||||
{
|
||||
if (ucType == GSSUCCESS)
|
||||
{
|
||||
MessageBox("Terminate Server Successful");
|
||||
m_editGroupID.SetWindowText("");
|
||||
m_editLobbyIP.SetWindowText("");
|
||||
m_editLobbyPort.SetWindowText("");
|
||||
}
|
||||
else
|
||||
{
|
||||
char szText[100];
|
||||
sprintf(szText,"Terminate Server Failed: %i",lReason);
|
||||
MessageBox(szText);
|
||||
}
|
||||
}*/
|
||||
|
||||
//UBI.COM: Receive a RequestParentGroup result
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_RequestParentGroupResult(GSubyte ucType, GSint lReason,
|
||||
GSint iServerID,GSint iGroupID, const GSchar *szGroupName, GSuint uiNbPlayers,
|
||||
GSuint uiMaxPlayers)
|
||||
{
|
||||
if (ucType == GSSUCCESS)
|
||||
{
|
||||
//UBI.COM: If the iServerID is greater then 0 its a valid Server.
|
||||
// Negative means we've received the complete list
|
||||
if (iServerID > 0)
|
||||
{
|
||||
char szText[100];
|
||||
|
||||
//UBI.COM: Add the parent group to the control list
|
||||
m_listGroups.InsertItem(m_iNbrGroups,ltoa(iServerID,szText,10));
|
||||
m_listGroups.SetItemText(m_iNbrGroups,1,ltoa(iGroupID,szText,10));
|
||||
m_listGroups.SetItemText(m_iNbrGroups,2,szGroupName);
|
||||
m_listGroups.SetItemText(m_iNbrGroups,3,ltoa(uiNbPlayers,szText,10));
|
||||
m_iNbrGroups++;
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox("Request Finished");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char szText[100];
|
||||
sprintf(szText,"Request Failed: %i",lReason);
|
||||
MessageBox(szText);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerLoginResults(
|
||||
GSubyte ucType, GSint iReason, GSint iLobbyServerID, GSint iGroupID )
|
||||
{
|
||||
if (ucType == GSSUCCESS)
|
||||
{
|
||||
MessageBox("Lobby Server Login Success");
|
||||
}
|
||||
else
|
||||
MessageBox("Lobby Server Login Fail");
|
||||
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerUpdateGroupSettingsResults(
|
||||
GSubyte ucType, GSint iReason, GSint iGroupID )
|
||||
{
|
||||
if (ucType == GSSUCCESS)
|
||||
{
|
||||
MessageBox("Update Success");
|
||||
}
|
||||
else
|
||||
MessageBox("Update Fail");
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerDisconnection()
|
||||
{
|
||||
MessageBox("Lobby Server Disconnection");
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerMemberNew( const GSchar* szMember, GSbool bSpectator,
|
||||
const GSchar* szIPAddress, const GSchar* szAltIPAddress, const GSvoid* pPlayerInfo,
|
||||
GSuint uiPlayerInfoSize, GSushort usPlayerStatus )
|
||||
{
|
||||
char szText[1024];
|
||||
sprintf(szText,"New Member %s",szMember);
|
||||
MessageBox(szText);
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerMatchStartReply( GSubyte ucType, GSint iReason, GSint iGroupID )
|
||||
{
|
||||
char szText[1024];
|
||||
sprintf(szText,"Match Start");
|
||||
MessageBox(szText);
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerMemberLeft( const GSchar* szMember )
|
||||
{
|
||||
char szText[1024];
|
||||
sprintf(szText,"Member Left %s",szMember);
|
||||
MessageBox(szText);
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerMatchFinishReply( GSubyte ucType, GSint iReason, GSint iGroupID )
|
||||
{
|
||||
char szText[1024];
|
||||
sprintf(szText,"Match Finish ");
|
||||
MessageBox(szText);
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerMemberUpdateInfo( const GSchar* szMember,
|
||||
const GSvoid* pPlayerInfo, GSuint uiPlayerInfoSize )
|
||||
{
|
||||
char szText[1024];
|
||||
sprintf(szText,"Member Info Update: %s",szMember);
|
||||
MessageBox(szText);
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerGroupConfigUpdate( GSuint uiGroupConfig, GSint iGroupID )
|
||||
{
|
||||
char szText[1024];
|
||||
sprintf(szText,"Group Config Update: %i %i",uiGroupConfig,iGroupID);
|
||||
MessageBox(szText);
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerMemberUpdateStatus( const GSchar* szPlayer,
|
||||
GSushort usPlayerStatus )
|
||||
{
|
||||
char szText[1024];
|
||||
sprintf(szText,"Member Status Update : %s %i",szPlayer,usPlayerStatus);
|
||||
MessageBox(szText);
|
||||
}
|
||||
|
||||
GSvoid CGsMasterServerLauncherDlg::RegServerRcv_LobbyServerNewGroup ( GSushort usRoomType,
|
||||
const GSchar* szRoomName,GSint iGroupID,GSint iLobbyServerID,GSint iParentGroupID,
|
||||
GSint uiGroupConfig,GSshort sGroupLevel,const GSchar* szMaster,const GSchar* szAllowedGames,
|
||||
const GSchar* szGame,const GSvoid* pGroupInfo,GSuint GroupInfoSize,GSuint uiMatchEventID,
|
||||
GSuint uiMaxPlayers,GSuint uiNbPlayers, GSuint uiMaxSpectators, GSuint uiNbSpectators,
|
||||
const GSchar* szGameVersion,const GSchar* szGSGameVersion,const GSchar* szIPAddress,
|
||||
const GSchar* szAltIPAddress )
|
||||
{
|
||||
char szText[1024];
|
||||
sprintf(szText,"Group Update : %s",szRoomName);
|
||||
MessageBox(szText);
|
||||
}
|
||||
|
||||
|
||||
//UBI.COM: Connect to the GSRouter and Login
|
||||
void CGsMasterServerLauncherDlg::OnBUTTONLogin()
|
||||
{
|
||||
char szIPAddress[IPADDRESSLENGTH];
|
||||
char szPort[100];
|
||||
GSushort usPort;
|
||||
char szUsername[NICKNAMELENGTH];
|
||||
char szPassword[PASSWORDLENGTH];
|
||||
char szVersion[VERSIONLENGTH];
|
||||
|
||||
m_editIPAddress.GetWindowText(szIPAddress,IPADDRESSLENGTH);
|
||||
m_editPort.GetWindowText(szPort,100);
|
||||
usPort = (GSushort)atol(szPort);
|
||||
|
||||
LOCKMUTEX();
|
||||
if (!RegServerSend_RouterConnect(szIPAddress,usPort))
|
||||
{
|
||||
MessageBox("RegServerSend_Connect Failed");
|
||||
UNLOCKMUTEX();
|
||||
return;
|
||||
}
|
||||
UNLOCKMUTEX();
|
||||
|
||||
m_editUsername.GetWindowText(szUsername,NICKNAMELENGTH);
|
||||
m_editPassword.GetWindowText(szPassword,PASSWORDLENGTH);
|
||||
m_editVersion.GetWindowText(szVersion,VERSIONLENGTH);
|
||||
|
||||
LOCKMUTEX();
|
||||
RegServerSend_LoginRouter(szUsername,szPassword,szVersion);
|
||||
UNLOCKMUTEX();
|
||||
|
||||
}
|
||||
|
||||
//UBI.COM: Request the list of Parent Groups
|
||||
void CGsMasterServerLauncherDlg::OnBUTTONReqGroups()
|
||||
{
|
||||
char szGamename[GAMELENGTH];
|
||||
|
||||
if (!m_bLoggedIn)
|
||||
{
|
||||
MessageBox("Not Logged In");
|
||||
return;
|
||||
}
|
||||
|
||||
m_editGamename.GetWindowText(szGamename,GAMELENGTH);
|
||||
|
||||
m_listGroups.DeleteAllItems();
|
||||
m_iNbrGroups = 0;
|
||||
|
||||
LOCKMUTEX();
|
||||
RegServerSend_RequestParentGroupOnLobby(szGamename);
|
||||
UNLOCKMUTEX();
|
||||
|
||||
|
||||
}
|
||||
|
||||
//UBI.COM: Register a server on the selected Parent Group
|
||||
void CGsMasterServerLauncherDlg::OnBUTTONRegServer()
|
||||
{
|
||||
int iServerID;
|
||||
int iParentID;
|
||||
char szServerName[NAMELENGTH];
|
||||
char szGamename[GAMELENGTH];
|
||||
int iServerType;
|
||||
char szText[100];
|
||||
int iMaxPlayers;
|
||||
int iMaxVisitors;
|
||||
char szPassword[PASSWORDLENGTH];
|
||||
char szGroupData[100];
|
||||
int iGroupDataSize;
|
||||
char szAltData[100];
|
||||
int iAltDataSize;
|
||||
char szGameData[100];
|
||||
int iGameDataSize;
|
||||
char szGameVersion[VERSIONLENGTH];
|
||||
char szGSVersion[VERSIONLENGTH];
|
||||
int iGamePort;
|
||||
|
||||
if (!m_bLoggedIn)
|
||||
{
|
||||
MessageBox("Not Logged In");
|
||||
return;
|
||||
}
|
||||
|
||||
POSITION pos = m_listGroups.GetFirstSelectedItemPosition();
|
||||
if (pos == NULL)
|
||||
{
|
||||
MessageBox("No Group Seleted");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
int iItem = m_listGroups.GetNextSelectedItem(pos);
|
||||
|
||||
m_listGroups.GetItemText(iItem,0,szText,100);
|
||||
iServerID = atol(szText);
|
||||
|
||||
m_listGroups.GetItemText(iItem,1,szText,100);
|
||||
iParentID = atol(szText);
|
||||
}
|
||||
|
||||
|
||||
m_editServerName.GetWindowText(szServerName,NAMELENGTH);
|
||||
|
||||
m_editGamename.GetWindowText(szGamename,NAMELENGTH);
|
||||
|
||||
int iSelection = m_cboServerType.GetCurSel();
|
||||
|
||||
switch(iSelection)
|
||||
{
|
||||
case 0:
|
||||
iServerType = ROOM_HYBRID_REGSERVER;
|
||||
break;
|
||||
case 1:
|
||||
iServerType = ROOM_UBI_CLIENTHOST_REGSERVER;
|
||||
break;
|
||||
case 2:
|
||||
iServerType = ROOM_UBI_GAMESERVER_REGSERVER;
|
||||
break;
|
||||
}
|
||||
|
||||
m_editMaxPlayers.GetWindowText(szText,100);
|
||||
iMaxPlayers = atol(szText);
|
||||
|
||||
m_editMaxVisitors.GetWindowText(szText,100);
|
||||
iMaxVisitors = atol(szText);
|
||||
|
||||
m_editGamePassword.GetWindowText(szPassword,100);
|
||||
|
||||
m_editGrpData.GetWindowText(szGroupData,100);
|
||||
iGroupDataSize = strlen(szGroupData) + 1;
|
||||
|
||||
m_editAltData.GetWindowText(szAltData,100);
|
||||
iAltDataSize = strlen(szAltData) + 1;
|
||||
|
||||
m_editGameData.GetWindowText(szGameData,100);
|
||||
iGameDataSize = strlen(szGameData) + 5;
|
||||
|
||||
GSubyte *pubGameData = (GSubyte*)malloc(iGameDataSize);
|
||||
|
||||
memset(pubGameData,0,iGameDataSize);
|
||||
|
||||
memcpy(pubGameData+4,szGameData,strlen(szGameData));
|
||||
|
||||
|
||||
m_editGameVersion.GetWindowText(szGameVersion,VERSIONLENGTH);
|
||||
m_editGSVersion.GetWindowText(szGSVersion,VERSIONLENGTH);
|
||||
|
||||
m_editGamePort.GetWindowText(szText,100);
|
||||
iGamePort = atol(szText);
|
||||
|
||||
LOCKMUTEX();
|
||||
RegServerSend_RegisterServerOnLobby(iServerID,iParentID,szServerName,szGamename,
|
||||
iServerType,iMaxPlayers,iMaxVisitors,szPassword,(GSubyte*)szGroupData,
|
||||
iGroupDataSize,(GSubyte*)szAltData,iAltDataSize,(GSubyte*)pubGameData,
|
||||
iGameDataSize,iGamePort,szGameVersion,szGSVersion,GS_FALSE,GS_FALSE);
|
||||
UNLOCKMUTEX();
|
||||
free(pubGameData);
|
||||
}
|
||||
|
||||
//UBI.COM: Terminate the registered server.
|
||||
void CGsMasterServerLauncherDlg::OnBUTTONTermServer()
|
||||
{
|
||||
LOCKMUTEX();
|
||||
RegServerSend_LobbyServerClose();
|
||||
UNLOCKMUTEX();
|
||||
}
|
||||
|
||||
//UBI.COM: Disconnect from the GSRouter
|
||||
void CGsMasterServerLauncherDlg::OnBUTTONDisconnect()
|
||||
{
|
||||
LOCKMUTEX();
|
||||
//RegServerSend_LobbyServerClose();
|
||||
RegServerSend_RouterDisconnect();
|
||||
UNLOCKMUTEX();
|
||||
}
|
||||
|
||||
//UBI.COM: Change the registered server info
|
||||
void CGsMasterServerLauncherDlg::OnBUTTONUpdate()
|
||||
{
|
||||
char szIPAddress[IPADDRESSLENGTH];
|
||||
GSushort usPort;
|
||||
int iMaxPlayers,iMaxVisitors,iGroupDataSize;
|
||||
int iGroupID,iGameDataSize,iGamePort,iAltDataSize;
|
||||
char szText[100],szPassword[PASSWORDLENGTH],szGroupData[100];
|
||||
char szGameData[100];
|
||||
char szAltData[100];
|
||||
|
||||
m_editLobbyIP.GetWindowText(szIPAddress,IPADDRESSLENGTH);
|
||||
m_editLobbyPort.GetWindowText(szText,100);
|
||||
usPort = (GSushort)atol(szText);
|
||||
|
||||
m_editGroupID.GetWindowText(szText,100);
|
||||
iGroupID = atol(szText);
|
||||
|
||||
m_editMaxPlayers.GetWindowText(szText,100);
|
||||
iMaxPlayers = atol(szText);
|
||||
|
||||
m_editMaxVisitors.GetWindowText(szText,100);
|
||||
iMaxVisitors = atol(szText);
|
||||
|
||||
m_editGamePassword.GetWindowText(szPassword,100);
|
||||
|
||||
m_editGrpData.GetWindowText(szGroupData,100);
|
||||
iGroupDataSize = strlen(szGroupData) + 1;
|
||||
|
||||
m_editAltData.GetWindowText(szAltData,100);
|
||||
iAltDataSize = strlen(szAltData) + 1;
|
||||
|
||||
m_editGameData.GetWindowText(szGameData,100);
|
||||
iGameDataSize = strlen(szGameData) + 1;
|
||||
|
||||
m_editGamePort.GetWindowText(szText,100);
|
||||
iGamePort = atol(szText);
|
||||
|
||||
LOCKMUTEX();
|
||||
RegServerSend_UpdateGroupSettings(iGroupID,-1,-1,-1,
|
||||
iMaxPlayers,iMaxVisitors,szPassword,(GSubyte*)szGroupData,iGroupDataSize,
|
||||
(GSubyte*)szAltData,iAltDataSize,(GSubyte*)szGameData,iGameDataSize,iGamePort);
|
||||
UNLOCKMUTEX();
|
||||
}
|
||||
|
||||
void CGsMasterServerLauncherDlg::OnBUTTONDownload()
|
||||
{
|
||||
CRegistry registry(HKEY_LOCAL_MACHINE, CString("SOFTWARE\\Ubi Soft\\Game Service"),
|
||||
false,KEY_READ);
|
||||
CString csGSIniURL;
|
||||
|
||||
char szDirectory[100];
|
||||
GetCurrentDirectory(100,szDirectory);
|
||||
|
||||
CString csGSIniFile = szDirectory;
|
||||
csGSIniFile += "\\GS.ini";
|
||||
|
||||
CString csLauncherIniFile = szDirectory;
|
||||
csLauncherIniFile += "\\Launcher.ini";
|
||||
|
||||
registry.OpenKey();
|
||||
|
||||
//UBI.COM: Try to read the ConnectURL from the registry
|
||||
// If it fails we'll look in Launcher.ini
|
||||
if (!registry.ReadString(CString("ConnectURL"), &csGSIniURL))
|
||||
{
|
||||
char szUrl[1024];
|
||||
|
||||
MessageBox("Registry failed; using Launcher.ini");
|
||||
|
||||
GetPrivateProfileString("Launcher","ConnectURL",
|
||||
"http://gsconnect.ubisoft.com/gsinit.php?user=%s&dp=%s",szUrl,
|
||||
1024,csLauncherIniFile);
|
||||
csGSIniURL = szUrl;
|
||||
|
||||
}
|
||||
registry.CloseKey();
|
||||
|
||||
char szUsername[NICKNAMELENGTH],szGamename[GAMELENGTH];
|
||||
|
||||
m_editUsername.GetWindowText(szUsername,NICKNAMELENGTH);
|
||||
m_editGamename.GetWindowText(szGamename,GAMELENGTH);
|
||||
|
||||
//UBI.COM: Replace the strings in the URL
|
||||
csGSIniURL.Replace("user=%s",(CString("user=")+szUsername));
|
||||
csGSIniURL.Replace("dp=%s",(CString("dp=")+szGamename));
|
||||
|
||||
//UBI.COM: Try to download the file GS.ini file if it fails
|
||||
// we can use the old local one.
|
||||
HINTERNET hNet = InternetOpen("",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,NULL);
|
||||
if (!hNet)
|
||||
MessageBox("InternetOpen Failed");
|
||||
else
|
||||
{
|
||||
HINTERNET hURL = InternetOpenUrl(hNet,csGSIniURL,NULL,0,INTERNET_FLAG_HYPERLINK,NULL);
|
||||
|
||||
if (!hURL)
|
||||
MessageBox("InternetOpenUrl Failed");
|
||||
else
|
||||
{
|
||||
GSchar szBuffer[1024];
|
||||
GSint iSize = 1024;
|
||||
DWORD iRead = 0;
|
||||
|
||||
FILE *pFile = fopen(csGSIniFile,"w");
|
||||
while (InternetReadFile(hURL,szBuffer,iSize,&iRead))
|
||||
{
|
||||
if (iRead != 0)
|
||||
{
|
||||
fwrite(szBuffer,sizeof(GSchar),iRead,pFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
fclose(pFile);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
char szIPAddress[IPADDRESSLENGTH];
|
||||
char szPort[100];
|
||||
|
||||
//UBI.COM: Read in the Address of the GSRouter.
|
||||
// We'll only read in the first address, in a real application
|
||||
// you should get both so that if one fails you can try the
|
||||
// other.
|
||||
GetPrivateProfileString("Servers","RouterIP0","srv-gstest",szIPAddress,
|
||||
IPADDRESSLENGTH,csGSIniFile);
|
||||
//UBI.COM: Read in the Launcher Port of the GSRouter
|
||||
GetPrivateProfileString("Servers","RouterLauncherPort0","41005",szPort,
|
||||
100,csGSIniFile);
|
||||
|
||||
m_editIPAddress.SetWindowText(szIPAddress);
|
||||
m_editPort.SetWindowText(szPort);
|
||||
|
||||
MessageBox("Download Finished");
|
||||
return;
|
||||
}
|
||||
|
||||
void CGsMasterServerLauncherDlg::OnBUTTONAbout()
|
||||
{
|
||||
char *szBuffer;
|
||||
unsigned int iBufferSize;
|
||||
|
||||
CGSVersion ver;
|
||||
ver.PrintModulesVersion(NULL,&iBufferSize);
|
||||
|
||||
szBuffer = (char*)malloc(iBufferSize);
|
||||
|
||||
ver.PrintModulesVersion(szBuffer,&iBufferSize);
|
||||
|
||||
MessageBox(szBuffer);
|
||||
free(szBuffer);
|
||||
}
|
||||
|
||||
void CGsMasterServerLauncherDlg::OnBUTTONStartMatch()
|
||||
{
|
||||
//GSchar szText[1024];
|
||||
//GSint iGroupID;
|
||||
|
||||
// m_editGroupID.GetWindowText(szText,100);
|
||||
// iGroupID = atol(szText);
|
||||
|
||||
|
||||
//Send the mode
|
||||
RegServerSend_MatchStart(1);
|
||||
}
|
||||
|
||||
void CGsMasterServerLauncherDlg::OnBUTTONFinishMatch()
|
||||
{
|
||||
|
||||
RegServerSend_MatchFinish();
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user