Metrick

SADGameInstance.cpp

Jun 24th, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.04 KB | None | 0 0
  1. #include "SAD.h"
  2. #include "SADGameInstance.h"
  3. #include "Personality/SADGameState.h"
  4.  
  5. #include "SocketSubsystem.h"
  6.  
  7.  
  8. #include "Engine/Engine.h"
  9. #include "Engine/LatentActionManager.h"
  10. #include "OnlineSubsystem.h"
  11. #include "OnlineSessionInterface.h"
  12. #include "GameFramework/OnlineSession.h"
  13. #include "GameFramework/PlayerState.h"
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20. USADGameInstance::USADGameInstance(const FObjectInitializer& ObjectInitializer)
  21.     : Super(ObjectInitializer)
  22. {
  23.  
  24. }
  25.  
  26. void USADGameInstance::Init()
  27. {
  28. //  todo Возможно UGUIManager не нужен на дедике
  29.     GUIManager = NewObject<UGUIManager>(this, GUIManagerType);
  30.     GUIManager->Init(this);
  31.  
  32.     InitUDPMessaging();
  33.     ServerManager = NewObject<UServerManager>(this, UServerManager::StaticClass());
  34.     ServerManager->SetOwner(nullptr);  // Owner is not assigned yet
  35.  
  36.     Super::Init();
  37.  
  38.     PRINT("USADGameInstance Init");
  39.  
  40.     if (IsRunningDedicatedServer())
  41.     {
  42.         PRINT("USADGameInstance OpenLevel TestLevel");
  43.         UGameplayStatics::OpenLevel(GetWorld(), "TestLevel");
  44.     }
  45. }
  46.  
  47. void USADGameInstance::ServerRegistration()
  48. {
  49.     bIsQuickStarted = false;
  50.  
  51.     FString username, password;
  52.     GConfig->GetString(
  53.         TEXT("DedicatedServer.Config"),
  54.         TEXT("Login"),
  55.         username,
  56.         GGameIni
  57.     );
  58.     GConfig->GetString(
  59.         TEXT("DedicatedServer.Config"),
  60.         TEXT("Password"),
  61.         password,
  62.         GGameIni
  63.     );
  64.  
  65.     PRINT("USADGameInstance::ServerRegistration login: %s, pass: %s", *username, *password);
  66.     await(this, ServerManager->login(username, password),
  67.         [=] (bool success, FString access_token, EAccessLevel access_level)
  68.         {
  69.             PRINT("USADGameInstance::Login sucess %s", BSTR(success));
  70.            
  71.             if (success && IsRunningDedicatedServer())
  72.                 OnSessionStart();
  73.             else
  74.                 ERROR_MSG("Setrver authorization is unsuccessful!");
  75.         },
  76.         [=]() { WARN_MSG("!!!+++ There is login TIMEOUT +++!!!"); }
  77.         );
  78. }
  79.  
  80. void USADGameInstance::OnSessionStart()
  81. {
  82.  
  83.     PRINT("USADGameInstance::OnSessionStart call of RegisterWorld");
  84.     bool canBind = false;
  85.     TSharedRef<FInternetAddr> localIp = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->GetLocalHostAddr(*GLog, canBind);
  86.     PRINT("OnSessionStart - %s: I am -- (%s)", *localIp->ToString(true) );
  87.     ServerManager->RegisterWorld(ServerManager->AccessToken, *localIp->ToString(true));
  88.     ServerManager->RequestItemsCatalog();
  89.     PRINT("USADGameInstance::OnSessionStart call of RequestItemsCatalog");
  90. }
  91.  
  92. void USADGameInstance::StartGameInstance()
  93. {
  94.     PRINT("--++USADGameInstance::StartGameInstance IsRunningDedicatedServer(): %d", IsRunningDedicatedServer());
  95.  
  96.     FURL URL = FURL();
  97.  
  98.     if (BrowseMap(URL) && IsRunningDedicatedServer())
  99.         ServerRegistration();
  100. }
  101.  
  102. bool USADGameInstance::BrowseMap(const FURL& URL)
  103. {
  104.     PRINT("USADGameInstance::BrowseMap URL: %s", *URL.ToString());
  105.     if (URL.Valid)
  106.     {
  107.         UEngine* const Engine = GetEngine();
  108.  
  109.         FString Error;
  110.  
  111.         const EBrowseReturnVal::Type BrowseRet = Engine->Browse(*WorldContext, URL, Error);
  112.  
  113.         if (BrowseRet == EBrowseReturnVal::Success)
  114.         {
  115.             PRINT("USADGameInstance::BrowseMap EBrowseReturnVal::Success");
  116.             return true;
  117.         }
  118.         else if (BrowseRet == EBrowseReturnVal::Pending)
  119.         {
  120.             WARN_MSG("USADGameInstance::BrowseMap EBrowseReturnVal::Pending");
  121.         }
  122.     }
  123.     WARN_MSG("USADGameInstance::BrowseMap URL for Browse is invalid! URL: %s", *URL.ToString());
  124.     return false;
  125. }
  126.  
  127. void USADGameInstance::InitUDPMessaging()
  128. {
  129.     int32 SMPort = -1;
  130.     GConfig->GetInt(
  131.         TEXT("ServerManager.Config"),
  132.         TEXT("Port"),
  133.         SMPort,
  134.         GGameIni
  135.     );
  136.  
  137.     FVector4 Host;
  138.     GConfig->GetVector4(
  139.         TEXT("ServerManager.Config"),
  140.         TEXT("Host"),
  141.         Host,
  142.         GGameIni
  143.     );
  144.  
  145.     FIPv4Address SMHost = FIPv4Address(int(Host.X), int(Host.Y), int(Host.Z), int(Host.W));
  146.    
  147.     PRINT("SMPort %d", SMPort);
  148.     PRINT("SMHost %d.%d.%d.%d", int(Host.X), int(Host.Y), int(Host.Z), int(Host.W));
  149.  
  150.     UDPMessager = NewObject<UUDPMessaging>(this);
  151.     UDPMessager->Connect(SMHost, SMPort);
  152. }
Advertisement
Add Comment
Please, Sign In to add comment