7#include "CoreMinimal.h"
9#include "Algo/Reverse.h"
10#include "Engine/EngineBaseTypes.h"
11#include "OnlineSubsystemPico.h"
12#include "OnlineSubsystemPicoTypes.h"
13#include "OnlineSubsystemPicoPackage.h"
23#if ENGINE_MAJOR_VERSION > 4
24 FUniqueNetIdPicoRef PicoId;
25#elif ENGINE_MINOR_VERSION > 26
26 FUniqueNetIdPicoRef PicoId;
27#elif ENGINE_MINOR_VERSION > 24
28 FUniqueNetIdPico PicoId;
46#if ENGINE_MAJOR_VERSION > 4
48 PicoId(FUniqueNetIdPico::EmptyId())
56 PicoId(InPicoId.AsShared())
64 PicoId(FUniqueNetIdPico::Create(InPicoId))
68 PicoId(FUniqueNetIdPico::Create(UserId))
74 FString Host = ConnectURL.Host;
77 FString PicoStringID = (Host.FindChar(
'.', DotIndex)) ? Host.Left(DotIndex) : Host;
78 uint64 PicoUintId = strtoull(TCHAR_TO_ANSI(*PicoStringID),
nullptr, 10);
79 const FUniqueNetIdPicoRef PicoNetId = FUniqueNetIdPico::Create(PicoUintId);
82#elif ENGINE_MINOR_VERSION > 26
84 PicoId(FUniqueNetIdPico::EmptyId())
92 PicoId(InPicoId.AsShared())
100 PicoId(FUniqueNetIdPico::Create(InPicoId))
104 PicoId(FUniqueNetIdPico::Create(UserId))
110 FString Host = ConnectURL.Host;
113 FString PicoStringID = (Host.FindChar(
'.', DotIndex)) ? Host.Left(DotIndex) : Host;
114 uint64 PicoUintId = strtoull(TCHAR_TO_ANSI(*PicoStringID),
nullptr, 10);
115 const FUniqueNetIdPicoRef PicoNetId = FUniqueNetIdPico::Create(PicoUintId);
119#elif ENGINE_MINOR_VERSION > 24
137 PicoId(FUniqueNetIdPico(InPicoId))
141 PicoId(FUniqueNetIdPico(UserId))
147 auto Host = ConnectURL.Host;
151 auto PicoStringID = (Host.FindChar(
'.', DotIndex)) ? Host.Left(DotIndex) : Host;
152 PicoId = strtoull(TCHAR_TO_ANSI(*PicoStringID),
nullptr, 10);
157#if ENGINE_MAJOR_VERSION > 4
160 return PicoId->GetID();
162 FString GetStrID()
const
164 return PicoId->GetStringID();
166#elif ENGINE_MINOR_VERSION > 26
169 return PicoId->GetID();
171 FString GetStrID()
const
173 return PicoId->GetStringID();
175#elif ENGINE_MINOR_VERSION > 24
178 return PicoId.GetID();
180 FString GetStrID()
const
182 return PicoId.GetStringID();
186 virtual TArray<uint8> GetRawIp()
const override
188#if ENGINE_MAJOR_VERSION > 4
189 TArray<uint8> RawAddressArray;
190 const uint8* PicoIdWalk = PicoId->GetBytes();
191 while (RawAddressArray.Num() < PicoId->GetSize())
193 RawAddressArray.Add(*PicoIdWalk);
196#elif ENGINE_MINOR_VERSION > 26
197 TArray<uint8> RawAddressArray;
198 const uint8* PicoIdWalk = PicoId->GetBytes();
199 while (RawAddressArray.Num() < PicoId->GetSize())
201 RawAddressArray.Add(*PicoIdWalk);
205#elif ENGINE_MINOR_VERSION > 24
206 TArray<uint8> RawAddressArray;
207 const uint8* PicoIdWalk = PicoId.GetBytes();
208 while (RawAddressArray.Num() < PicoId.GetSize())
210 RawAddressArray.Add(*PicoIdWalk);
217#if PLATFORM_LITTLE_ENDIAN
218 Algo::Reverse(RawAddressArray);
221 return RawAddressArray;
224 virtual void SetRawIp(
const TArray<uint8>& RawAddr)
override
229 TArray<uint8> WorkingArray = RawAddr;
232#if PLATFORM_LITTLE_ENDIAN
233 Algo::Reverse(WorkingArray);
236 for (int32 i = 0; i < WorkingArray.Num(); ++i)
238 NewId |= (ppfID)WorkingArray[i] << (i * 8);
241#if ENGINE_MAJOR_VERSION > 4
242 PicoId = FUniqueNetIdPico::Create(NewId);
243#elif ENGINE_MINOR_VERSION > 26
244 PicoId = FUniqueNetIdPico::Create(NewId);
245#elif ENGINE_MINOR_VERSION > 24
246 PicoId = FUniqueNetIdPico(NewId);
267 void SetIp(
const TCHAR* InAddr,
bool& bIsValid)
override
277 void GetIp(uint32& OutAddr)
const override
336#if ENGINE_MAJOR_VERSION > 4
337 return PicoId->ToString();
338#elif ENGINE_MINOR_VERSION > 26
339 return PicoId->ToString();
340#elif ENGINE_MINOR_VERSION > 24
341 return PicoId.ToString();
351 virtual bool operator==(
const FInternetAddr& Other)
const override
354 return PicoId == PicoOther.PicoId;
362 virtual uint32 GetTypeHash()
const override
364 return ::GetTypeHash((uint64)GetID());
367 virtual FName GetProtocolType()
const override
369 return FNetworkProtocolTypes::Pico;
379#if ENGINE_MAJOR_VERSION > 4
380 return PicoId->IsValid();
381#elif ENGINE_MINOR_VERSION > 26
382 return PicoId->IsValid();
383#elif ENGINE_MINOR_VERSION > 24
384 return PicoId.IsValid();
389 virtual TSharedRef<FInternetAddr> Clone()
const override
392 NewAddress->PicoId = PicoId;
Definition: IPAddressPico.h:20
void SetAnyAddress() override
Definition: IPAddressPico.h:312
void SetPort(int32 InPort) override
Definition: IPAddressPico.h:287
int32 GetPort() const override
Definition: IPAddressPico.h:305
void SetBroadcastAddress() override
Definition: IPAddressPico.h:318
void GetIp(uint32 &OutAddr) const override
Definition: IPAddressPico.h:277
void SetIp(const TCHAR *InAddr, bool &bIsValid) override
Definition: IPAddressPico.h:267
void SetLoopbackAddress() override
Definition: IPAddressPico.h:324
virtual bool IsValid() const override
Definition: IPAddressPico.h:377
void GetPort(int32 &OutPort) const override
Definition: IPAddressPico.h:297
virtual bool operator==(const FInternetAddr &Other) const override
Definition: IPAddressPico.h:351
FString ToString(bool bAppendPort) const override
Definition: IPAddressPico.h:334
void SetIp(uint32 InAddr) override
Definition: IPAddressPico.h:257