Files
UnrealEngineUWP/Engine/Source/Programs/Horde/Samples/RemoteWorkerCpp/ComputeChannel.cpp
Ben Marsh 7f434b8cd4 Horde: Remove debug output.
#preflight none

[CL 24985148 by Ben Marsh in ue5-main branch]
2023-04-10 18:14:18 -04:00

97 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include <windows.h>
#include <iostream>
#include <assert.h>
#include "ComputeChannel.h"
const char* const FComputeChannel::EnvVarName = "UE_HORDE_COMPUTE_IPC";
FComputeChannel::FComputeChannel()
{
}
FComputeChannel::~FComputeChannel()
{
Close();
}
bool FComputeChannel::Open()
{
Close();
char EnvVar[MAX_PATH];
int Length = GetEnvironmentVariableA(EnvVarName, EnvVar, sizeof(EnvVar) / sizeof(EnvVar[0]));
if (Length <= 0 || Length >= sizeof(EnvVar))
{
Close();
return false;
}
char Buffer[MAX_PATH];
sprintf_s(Buffer, "%s_SEND", EnvVar);
if (!SendBuffer.OpenExisting(Buffer))
{
Close();
return false;
}
sprintf_s(Buffer, "%s_RECV", EnvVar);
if (!RecvBuffer.OpenExisting(Buffer))
{
Close();
return false;
}
return true;
}
void FComputeChannel::Close()
{
SendBuffer.Close();
RecvBuffer.Close();
}
void FComputeChannel::Send(const void* Data, size_t Length)
{
while (Length > 0)
{
size_t Size;
unsigned char* WriteMemory = SendBuffer.GetWriteMemory(Size);
if (Size == 0)
{
SendBuffer.WaitToWrite(0);
continue;
}
size_t CopyLength = (Size < Length) ? Size : Length;
memcpy(WriteMemory, Data, CopyLength);
SendBuffer.AdvanceWritePosition(CopyLength);
Data = (unsigned char*)Data + CopyLength;
Length -= CopyLength;
}
}
size_t FComputeChannel::Receive(void* Data, size_t Length)
{
size_t Size;
const unsigned char* ReadMemory = RecvBuffer.GetReadMemory(Size);
while (Size == 0 && !RecvBuffer.IsComplete())
{
RecvBuffer.WaitToRead(0);
ReadMemory = RecvBuffer.GetReadMemory(Size);
}
size_t CopyLength = (Size < Length) ? Size : Length;
memcpy(Data, ReadMemory, CopyLength);
RecvBuffer.AdvanceReadPosition(CopyLength);
return CopyLength;
}