Ejemplo n.º 1
0
void CSbmfcsampleDlg::SBCallback(ServerBrowser serverBrowser, SBCallbackReason reason, SBServer server, void *instance)
{
	CString str;
	CSbmfcsampleDlg * dlg = (CSbmfcsampleDlg *)instance;

	CString address;
	if(server)
		address.Format("%s:%d", SBServerGetPublicAddress(server), SBServerGetPublicQueryPort(server));

	switch(reason)
	{
	case sbc_serveradded:
		dlg->AddServer(server, TRUE);
		break;
	case sbc_serverupdated:
		dlg->AddServer(server, TRUE);
		break;
	case sbc_serverupdatefailed:
		break;
	case sbc_serverdeleted:
		dlg->RemoveServer(server);
		break;
	case sbc_updatecomplete:
		dlg->m_progress.SetPos(100);
		break;
	case sbc_queryerror:
		str.Format("Query Error: %s\n", ServerBrowserListQueryError(dlg->m_serverBrowser));
		dlg->MessageBox(str);
		break;
	}
	
	GSI_UNUSED(serverBrowser);
}
Ejemplo n.º 2
0
static void GameStartedCallback
(
	PEER peer,
	SBServer server,
	const gsi_char * message,
	void * param
)
{
	_tprintf(_T("The game is starting at %s\n"), SBServerGetPublicAddress(server));
	if(message && message[0])
		_tprintf(_T(": %s\n"), message);
	else
		_tprintf(_T("\n"));
		
	GSI_UNUSED(peer);
	GSI_UNUSED(param);
}
Ejemplo n.º 3
0
/* SBServerGetConnectionInfo
----------------
Check if Nat Negotiation is requires, based off whether it is a lan game, public ip present and several other facts. 
Returns an IP string to use for NatNeg, or direct connect if possible
Work for subsequent connection to this server, One of three results will occur
i) Lan game, connect using ipstring
2) Internet game, connect using ipstring
3) nat traversal required, perform nat negotiation using Nat SDK and this ipstring before connecting. 

return sb_true if further processing is required... i.e. NAT.   sb_false if not.
fills an IP string
*/
SBBool SBServerGetConnectionInfo(ServerBrowser gSB, SBServer server, gsi_u16 PortToConnectTo, char *ipstring)
{
	SBBool natneg = SBFalse;
    if (SBServerHasPrivateAddress(server) == SBTrue && (SBServerGetPublicInetAddress(server) == ServerBrowserGetMyPublicIPAddr(gSB)))
	{

		//directly connect to private IP (LAN)
		sprintf(ipstring,"%s:%d", SBServerGetPrivateAddress(server),PortToConnectTo );
 
	}
	else
	if ((SBServerDirectConnect(server) == SBTrue )&& (SBServerHasPrivateAddress(server) == SBFalse))
	{
            //can directly connect to public IP, no negotiation required
			sprintf(ipstring,"%s:%d", SBServerGetPrivateAddress(server),	PortToConnectTo );
	}
	else
	{
		//Nat Negotiation required
		natneg = SBTrue;
		sprintf(ipstring,"%s:%d", SBServerGetPublicAddress(server),	SBServerGetPublicQueryPort	(server) );
	}
	return natneg;
}
Ejemplo n.º 4
0
void CClientDlg::AddServerToList		(SBServer server)
{
	if (!server) return;
	net_csEnumeration.Enter			();

	HOST_NODE	NewNode, *NODE = &NewNode;
	ZeroMemory	(NODE, sizeof(HOST_NODE));
	sprintf(NODE->dpCharAddress, "%s:%d", SBServerGetPublicAddress(server), SBServerGetPublicQueryPort(server));
	sprintf(NODE->dpHostName, "%s", SBServerGetPublicAddress(server));
	//---------------------------------------------------------------------
	bool new_server = true;
	for (u32 I=0; I<net_Hosts.size(); I++)
	{
		HOST_NODE&	N = net_Hosts	[I];
		//		if	( !stricmp(N.dpCharAddress, NODE->dpCharAddress))
		if (N.dpServer == server)
		{
			new_server = false;
			NODE = &N;
			break;
		}
	};
	//---------------------------------------------------------------------
	sprintf(NODE->dpServerName, "%s", SBServerGetStringValue(server, qr2_registered_key_list[HOSTNAME_KEY], NODE->dpHostName));
	//  [5/20/2005]
	char dbgStr[1024];
	sprintf(dbgStr, "%s - %s\n", NODE->dpHostName, NODE->dpServerName);
	OutputDebugString(dbgStr);
	//  [5/20/2005]

	sprintf(NODE->dpSessionName, "%s", SBServerGetStringValue(server, qr2_registered_key_list[MAPNAME_KEY], "Unknown"));
	
	NODE->dpServerGameType = GetGameType((char*)SBServerGetStringValue(server, qr2_registered_key_list[GAMETYPE_NAME_KEY], "UNKNOWN"));
	string1024 xtmp;
	strcpy(xtmp, (char*)SBServerGetStringValue(server, qr2_registered_key_list[GAMETYPE_KEY], ""));

	NODE->dpServerGameType = GetGameType((byte)SBServerGetIntValue(server, qr2_registered_key_list[GAMETYPE_KEY], 0));

	NODE->dpPassword	= SBServerGetBoolValue(server, qr2_registered_key_list[PASSWORD_KEY], SBFalse);
	NODE->dpPing = SBServerGetPing(server);
	NODE->dpServerNumPlayers = SBServerGetIntValue(server, qr2_registered_key_list[NUMPLAYERS_KEY], 0);
	NODE->dpServerMaxPlayers = SBServerGetIntValue(server, qr2_registered_key_list[MAXPLAYERS_KEY], 32);
	NODE->dpDedicated	= SBServerGetBoolValue(server, qr2_registered_key_list[DEDICATED_KEY], SBFalse) == SBTrue;
	NODE->dpFFire		= SBServerGetBoolValue(server, qr2_registered_key_list[G_FRIENDLY_FIRE_KEY], SBFalse) == SBTrue;
	NODE->dpPort		= SBServerGetIntValue(server, qr2_registered_key_list[HOSTPORT_KEY], 0);
	NODE->dpServer = server;

	char PlayerName[1024] = "";
	sprintf(PlayerName, "%s", SBServerGetPlayerStringValue(server, 0, "player", "Unknown"));

	SBBool HasFullKeys = SBServerHasFullKeys(server);
	if (new_server)
		net_Hosts.push_back(*NODE);
	else
	{
 		int x=0;
		x=x;
	}

	if (m_bQuickRefresh)
	{
		m_pGameSpyUpdateList.EnableWindow(TRUE);
		m_pGameSpyRefreshList.EnableWindow(TRUE);
		m_bQuickRefresh = false;
	};
	net_csEnumeration.Leave			();
};