UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MultichannelTcpReceiver.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "NetworkMessage.h"
8#include "HAL/Runnable.h"
10
11class Error;
12class FSocket;
13
22
23
28 : public FRunnable
29{
30public:
31
39 : Socket(InSocket)
40 , ReceiveDelegate(InReceiveDelegate)
41 {
42 Thread = FRunnableThread::Create(this, TEXT("FMultichannelTCPReceiver"), 8 * 1024, TPri_AboveNormal);
43 }
44
47 {
48 if (Thread)
49 {
50 Thread->Kill(true);
51 delete Thread;
52 }
53 }
54
55public:
56
61 {
62 return BytesReceived;
63 }
64
65public:
66
67 // FRunnable interface
68
69 virtual bool Init( )
70 {
71 return true;
72 }
73
74 virtual uint32 Run( )
75 {
76 while (1)
77 {
78 // read a header and payload pair
79 FArrayReader Payload;
80
82 {
83 // if we failed to receive the payload, then the client is most likely dead, so, we can kill this connection
84 // @todo: Add more error codes, maybe some errors shouldn't kill the connection
85 break;
86 }
87
88 uint32 Magic;
89
90 Payload << Magic;
91
92 if (Magic != MultichannelMagic)
93 {
94 UE_LOG(LogMultichannelTCP, Error, TEXT("Wrong magic."));
95
96 break;
97 }
98
99 uint32 Channel;
100 Payload << Channel;
101
103 Payload << InnerPayload;
104
105 ReceiveDelegate.Execute(InnerPayload, Channel, Payload.ForceByteSwapping());
106
107 FPlatformAtomics::InterlockedAdd(&BytesReceived, InnerPayload.Num());
108 }
109
110 return 0;
111 }
112
113 virtual void Stop( ) { }
114 virtual void Exit( ) { }
115
116private:
117
119 int32 BytesReceived;
120
122 FSocket* Socket;
123
125 FRunnableThread* Thread;
126
127private:
128
130 FOnMultichannelTcpReceive ReceiveDelegate;
131};
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_DELEGATE_ThreeParams(DelegateName, Param1Type, Param2Type, Param3Type)
Definition DelegateCombinations.h:66
@ TPri_AboveNormal
Definition GenericPlatformAffinity.h:28
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
@ MultichannelMagic
Definition MultichannelTcpGlobals.h:14
uint32_t uint32
Definition binka_ue_file_header.h:6
UE_FORCEINLINE_HINT bool ForceByteSwapping() const
Definition Archive.h:399
Definition ArrayReader.h:12
Definition MultichannelTcpReceiver.h:29
~FMultichannelTcpReceiver()
Definition MultichannelTcpReceiver.h:46
FMultichannelTcpReceiver(FSocket *InSocket, const FOnMultichannelTcpReceive &InReceiveDelegate)
Definition MultichannelTcpReceiver.h:38
virtual uint32 Run()
Definition MultichannelTcpReceiver.h:74
virtual void Stop()
Definition MultichannelTcpReceiver.h:113
virtual void Exit()
Definition MultichannelTcpReceiver.h:114
virtual bool Init()
Definition MultichannelTcpReceiver.h:69
int32 GetBytesReceived()
Definition MultichannelTcpReceiver.h:60
Definition RunnableThread.h:20
virtual bool Kill(bool bShouldWait=true)=0
static CORE_API FRunnableThread * Create(class FRunnable *InRunnable, const TCHAR *ThreadName, uint32 InStackSize=0, EThreadPriority InThreadPri=TPri_Normal, uint64 InThreadAffinityMask=FPlatformAffinity::GetNoAffinityMask(), EThreadCreateFlags InCreateFlags=EThreadCreateFlags::None)
Definition ThreadingBase.cpp:862
Definition Runnable.h:20
Definition NetworkMessage.h:116
Definition Sockets.h:19
Definition Array.h:670
static SOCKETS_API bool ReceivePayload(FArrayReader &OutPayload, const FSimpleAbstractSocket &Socket)
Definition NetworkMessage.cpp:90