Hi,
Here is the code I've used for a successful networked game connection between a client and server. Hope it helps
Code:
// These don't need to be filled in with data but they cannot be None or ShowMatchmakingUI will crash
var OnlineGameSearch SearchSettings;
var OnlineGameSettings GameSettings;
simulated event PostBeginPlay()
{
super.PostBeginPlay();
SearchSettings = new class'OnlineGameSearch';
GameSettings = new class'OnlineGameSettings';
}
function ClearCreateOnlineGameDelegates()
{
OnlineSub.GameInterface.ClearCreateOnlineGameCompleteDelegate(OnCreateOnlineGameComplete);
}
function OnCreateOnlineGameComplete(name SessionName,bool bWasSuccessful)
{
local string URL;
if(!bWasSuccessful) {
ClearCreateOnlineGameDelegates();
return;
}
URL = "map01" $ "?game=MyGame.MyDeathmatch" $ "?listen";
ClientTravel(URL, TRAVEL_Absolute);
ClearCreateOnlineGameDelegates();
}
function ClearJoinOnlineDelegates()
{
OnlineSub.GameInterface.ClearJoinOnlineGameCompleteDelegate(OnInviteJoinComplete);
}
function OnJoinOnlineGameComplete(name SessionName,bool bWasSuccessful)
{
local string URL;
if(!bWasSuccessful || OnlineSub == none || OnlineSub.GameInterface == none ) {
ClearJoinOnlineDelegates();
return;
}
if (OnlineSub.GameInterface.GetResolvedConnectString(SessionName,URL))
{
// allow game to override
URL = ModifyClientURL(URL);
`Log("Resulting url is ("$URL$")");
// Open a network connection to it
ClientTravel(URL, TRAVEL_Absolute);
}
ClearJoinOnlineDelegates();
}
function OpenNativeMatchmakingUI()
{
local OnlineSuppliedUIInterface OSI;
if(OnlineSub == none)
OnlineSub = class'GameEngine'.static.GetOnlineSubsystem();
if(OnlineSub == none)
return;
if(OnlineSub.GameInterface == none)
return;
OSI = OnlineSuppliedUIInterface(OnlineSub.GetNamedInterface('SuppliedUI'));
if (OSI == none)
return;
OnlineSub.GameInterface.AddCreateOnlineGameCompleteDelegate(OnCreateOnlineGameComplete);
OnlineSub.GameInterface.AddJoinOnlineGameCompleteDelegate(OnInviteJoinComplete);
OSI.ShowMatchmakingUI(0,SearchSettings, GameSettings);
}
Bookmarks