Skip to content

Commit 197042a

Browse files
author
Nako Sung
committed
Add DGram SendTo
1 parent 253e4fa commit 197042a

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed

Source/.vscode/launch.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
// Use IntelliSense to find out which attributes exist for node debugging
3+
// Use hover for the description of the existing attributes
4+
// For further information visit https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"name": "Launch Program",
9+
"type": "node2",
10+
"request": "launch",
11+
"program": "${workspaceRoot}/app.js",
12+
"cwd": "${workspaceRoot}"
13+
},
14+
{
15+
"name": "Attach to Process",
16+
"type": "node2",
17+
"request": "attach",
18+
"port": 9229
19+
}
20+
]
21+
}

Source/V8/Private/JavascriptLibrary.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,69 @@
33
#include "Engine/DynamicBlueprintBinding.h"
44
#include "JavascriptContext.h"
55
#include "IV8.h"
6+
#include "SocketSubsystem.h"
7+
8+
struct FPrivateSocketHandle
9+
{
10+
FPrivateSocketHandle(ISocketSubsystem* InSocketSub, FSocket* InSocket)
11+
: SocketSub(InSocketSub), Socket(InSocket)
12+
{}
13+
14+
~FPrivateSocketHandle()
15+
{
16+
SocketSub->DestroySocket(Socket);
17+
}
18+
19+
ISocketSubsystem* SocketSub;
20+
FSocket* Socket;
21+
};
22+
23+
FJavascriptSocket UJavascriptLibrary::CreateSocket(FName SocketType, FString Description, bool bForceUDP)
24+
{
25+
auto SocketSub = ISocketSubsystem::Get();
26+
return{ MakeShared<FPrivateSocketHandle>(SocketSub, SocketSub->CreateSocket(SocketType, Description, bForceUDP)) };
27+
}
28+
29+
FJavascriptInternetAddr UJavascriptLibrary::CreateInternetAddr()
30+
{
31+
auto SocketSub = ISocketSubsystem::Get();
32+
return{ SocketSub->CreateInternetAddr() };
33+
}
34+
35+
bool UJavascriptLibrary::ResolveIp(FString HostName, FString& OutIp)
36+
{
37+
auto SocketSub = ISocketSubsystem::Get();
38+
TSharedRef<FInternetAddr> HostAddr = SocketSub->CreateInternetAddr();
39+
ESocketErrors HostResolveError = SocketSub->GetHostByName(TCHAR_TO_ANSI(*HostName), *HostAddr);
40+
if (HostResolveError == SE_NO_ERROR || HostResolveError == SE_EWOULDBLOCK)
41+
{
42+
OutIp = HostAddr->ToString(false);
43+
return true;
44+
}
45+
return false;
46+
}
47+
48+
void UJavascriptLibrary::SetIp(FJavascriptInternetAddr& Addr, FString ResolvedAddress, bool& bValid)
49+
{
50+
Addr.Handle->SetIp(*ResolvedAddress, bValid);
51+
}
52+
53+
void UJavascriptLibrary::SetPort(FJavascriptInternetAddr& Addr, int32 Port)
54+
{
55+
Addr.Handle->SetPort(Port);
56+
}
57+
58+
bool UJavascriptLibrary::SendMemoryTo(FJavascriptSocket& Socket, const FJavascriptInternetAddr& ToAddr, int32 NumBytes, int32& BytesSent)
59+
{
60+
auto Buffer = FArrayBufferAccessor::GetData();
61+
auto Size = FArrayBufferAccessor::GetSize();
62+
63+
if (NumBytes > Size) return false;
64+
if (!Socket.Handle.IsValid()) return false;
65+
if (!ToAddr.Handle.IsValid()) return false;
66+
67+
return Socket.Handle->Socket->SendTo(reinterpret_cast<const uint8*>(Buffer), NumBytes, BytesSent, *ToAddr.Handle);
68+
}
669

770
void UJavascriptLibrary::SetMobile(USceneComponent* SceneComponent)
871
{

Source/V8/Public/JavascriptLibrary.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,48 @@ struct FJavascriptStreamableManager
165165
TSharedPtr<FStreamableManager> Handle;
166166
};
167167

168+
struct FPrivateSocketHandle;
169+
170+
USTRUCT()
171+
struct FJavascriptSocket
172+
{
173+
GENERATED_BODY()
174+
175+
TSharedPtr<FPrivateSocketHandle> Handle;
176+
};
177+
178+
USTRUCT()
179+
struct FJavascriptInternetAddr
180+
{
181+
GENERATED_BODY()
182+
183+
TSharedPtr<FInternetAddr> Handle;
184+
};
185+
168186
UCLASS()
169187
class V8_API UJavascriptLibrary : public UBlueprintFunctionLibrary
170188
{
171189
GENERATED_BODY()
172190

173191
public:
192+
UFUNCTION(BlueprintCallable, Category = "Scripting|Javascript")
193+
static FJavascriptSocket CreateSocket(FName SocketType, FString Description, bool bForceUDP = false);
194+
195+
UFUNCTION(BlueprintCallable, Category = "Scripting|Javascript")
196+
static FJavascriptInternetAddr CreateInternetAddr();
197+
198+
UFUNCTION(BlueprintCallable, Category = "Scripting|Javascript")
199+
static bool ResolveIp(FString HostName, FString& OutIp);
200+
201+
UFUNCTION(BlueprintCallable, Category = "Scripting|Javascript")
202+
static void SetIp(FJavascriptInternetAddr& Addr, FString ResolvedAddress, bool& bValid);
203+
204+
UFUNCTION(BlueprintCallable, Category = "Scripting|Javascript")
205+
static void SetPort(FJavascriptInternetAddr& Addr, int32 Port);
206+
207+
UFUNCTION(BlueprintCallable, Category = "Scripting|Javascript")
208+
static bool SendMemoryTo(FJavascriptSocket& Socket, const FJavascriptInternetAddr& ToAddr, int32 NumBytes, int32& BytesSent);
209+
174210
UFUNCTION(BlueprintCallable, Category = "Scripting|Javascript")
175211
static FJavascriptStreamableManager CreateStreamableManager();
176212

0 commit comments

Comments
 (0)