/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuRPCRequest.cpp Date: 2022-6-29 Author: Reece ***/ #include #include "AuRPC.hpp" #include "AuRPCRequest.hpp" bool AuRPCRequest::SetData(const AuByteBuffer& toRead) { return this->SetData(AuMemoryViewRead(toRead)); } bool AuRPCRequest::SetData(const AuMemoryViewRead& view) { data.Reset(); this->packetLength = view.length + this->HeaderLength(); data.Resize(view.length + this->HeaderLength()); if (!this->data) { SysPushErrorMem(); return false; } this->WriteRPCHeader(); this->data.Write(view.ptr, view.length); return bool(data); } void AuRPCRequest::SetCallback(const AuSPtr &callback) { this->callback = callback; } bool AuRPCRequest::EmptyRequest() { return SetData(AuMemoryViewRead {}); } AuMemoryViewRead AuRPCRequest::GetData() { return this->data; } void AuRPCRequest::WriteDummy() { WriteRPCHeader(); } void AuRPCRequest::WriteHeaderConnect() { this->data.Write(5); this->data.Write(kRequestConnect); } void AuRPCRequest::WriteRPCHeader() { this->data.Write(this->packetLength); this->data.Write(this->dataType); this->data.Write(this->serviceId); this->data.Write(this->methodId); this->data.Write(AuUInt64(AuUInt(this))); } AuUInt32 AuRPCRequest::HeaderLength() { return 4 + 1 + 4 /*service id*/ + 4 /*method*/ + 8 /*uid*/; } ERPCRequestState AuRPCRequest::GetState() { return this->state; } AuSPtr AuRPCNewRequest(AuUInt32 serviceId, AuUInt32 methodId) { auto req = AuMakeShared(); if (!req) { return {}; } req->serviceId = serviceId; req->methodId = methodId; req->WriteRPCHeader(); return req; }