// Copyright Epic Games, Inc. All Rights Reserved. #include "InterchangeCommands.h" #include "Serialization/Archive.h" #include "Serialization/MemoryWriter.h" #include "Serialization/MemoryReader.h" namespace UE { namespace Interchange { int32 DispatcherCommandVersion::GetMajor() { return 20; } int32 DispatcherCommandVersion::GetMinor() { return 0; } int32 DispatcherCommandVersion::GetPatch() { return 0; } TSharedPtr CreateCommand(ECommandId CommandType) { switch (CommandType) { case ECommandId::Ping: return MakeShared(); case ECommandId::Error: return MakeShared(); case ECommandId::BackPing: return MakeShared(); case ECommandId::RunTask: return MakeShared(); case ECommandId::NotifyEndTask: return MakeShared(); case ECommandId::QueryTaskProgress: return MakeShared(); case ECommandId::CompletedQueryTaskProgress: return MakeShared(); case ECommandId::Terminate: return MakeShared(); } return nullptr; } void SerializeCommand(ICommand& Command, TArray& OutBuffer) { FMemoryWriter ArWriter(OutBuffer); uint8 type = static_cast(Command.GetType()); ArWriter << type; ArWriter << Command; } TSharedPtr DeserializeCommand(const TArray& InBuffer) { FMemoryReader ArReader(InBuffer); uint8 type = 0; ArReader << type; if (TSharedPtr Command = CreateCommand(static_cast(type))) { ArReader << *Command; return ArReader.IsError() ? nullptr : Command; } return nullptr; } void FErrorCommand::SerializeImpl(FArchive& Ar) { Ar << ErrorMessage; } void FRunTaskCommand::SerializeImpl(FArchive& Ar) { Ar << JsonDescription; Ar << TaskIndex; } void FCompletedTaskCommand::SerializeImpl(FArchive& Ar) { Ar << ProcessResult; Ar << JSonMessages; Ar << JSonResult; Ar << TaskIndex; } FQueryTaskProgressCommand::FQueryTaskProgressCommand(const TArray& Tasks) { TaskIndexes = Tasks; } void FQueryTaskProgressCommand::SerializeImpl(FArchive& Ar) { Ar << TaskIndexes; } FArchive& operator<<(FArchive& Ar, FCompletedQueryTaskProgressCommand::FTaskProgressData& A) { Ar << A.TaskIndex; Ar << A.TaskState; Ar << A.TaskProgress; return Ar; } void FCompletedQueryTaskProgressCommand::SerializeImpl(FArchive& Ar) { Ar << TaskStates; } }//ns Interchange }//ns UE