update cmd client
This commit is contained in:
@@ -4,66 +4,72 @@
|
||||
|
||||
namespace basalt::presenter::cmd_client {
|
||||
|
||||
CommandClient::CommandClient() : m_PipeOperator(BSTEXT("ed0e3f1f-d214-4880-9562-640bce15e72e")), m_Status(ClientStatus::Ready) {}
|
||||
CmdClient::CmdClient() : m_PipeOperator(BSTEXT("ed0e3f1f-d214-4880-9562-640bce15e72e")), m_Status(CmdClientStatus::Ready) {}
|
||||
|
||||
CommandClient::~CommandClient() {}
|
||||
CmdClient::~CmdClient() {}
|
||||
|
||||
HandshakePayload CommandClient::WaitHandshake() {
|
||||
if (m_Status != ClientStatus::Ready) {
|
||||
HandshakePayload CmdClient::wait_handshake() {
|
||||
if (m_Status != CmdClientStatus::Ready) {
|
||||
throw std::runtime_error("unexcpected client status");
|
||||
}
|
||||
|
||||
// Wait for handshake request from Trainer (code 0x61)
|
||||
ProtocolCode request_code;
|
||||
m_PipeOperator.Read(&request_code, sizeof(request_code));
|
||||
m_PipeOperator.read_pod(request_code);
|
||||
if (request_code != ProtocolCode::HANDSHAKE_REQUEST) {
|
||||
throw std::runtime_error("unexpcted handshake code");
|
||||
}
|
||||
// Accept payload
|
||||
HandshakePayload handshake_payload;
|
||||
m_PipeOperator.Read(&handshake_payload, sizeof(HandshakePayload));
|
||||
m_PipeOperator.read_pod(handshake_payload);
|
||||
|
||||
// Send handshake response (code 0x62) back to Trainer
|
||||
ProtocolCode response_code = ProtocolCode::HANDSHAKE_RESPONSE;
|
||||
m_PipeOperator.Write(&response_code, sizeof(response_code));
|
||||
m_PipeOperator.write_pod(response_code);
|
||||
|
||||
// Set status and return
|
||||
m_Status = ClientStatus::Running;
|
||||
m_Status = CmdClientStatus::Running;
|
||||
return handshake_payload;
|
||||
}
|
||||
|
||||
bool CommandClient::Tick(bool actively_stop) {
|
||||
if (m_Status != ClientStatus::Running) {
|
||||
bool CmdClient::tick(bool actively_stop) {
|
||||
if (m_Status != CmdClientStatus::Running) {
|
||||
throw std::runtime_error("unexcpected client status");
|
||||
}
|
||||
|
||||
// If actively stop, send actively stop code to Trainer first
|
||||
if (actively_stop) {
|
||||
ProtocolCode sent_code = ProtocolCode::STOP_REQUEST;
|
||||
m_PipeOperator.Write(&sent_code, sizeof(sent_code));
|
||||
ProtocolCode actively_stop_code = ProtocolCode::STOP_REQUEST;
|
||||
m_PipeOperator.write_pod(actively_stop_code);
|
||||
}
|
||||
|
||||
// Send data ready code to Trainer
|
||||
ProtocolCode sent_code = ProtocolCode::DATA_READY;
|
||||
m_PipeOperator.Write(&sent_code, sizeof(sent_code));
|
||||
ProtocolCode data_ready_code = ProtocolCode::DATA_READY;
|
||||
m_PipeOperator.write_pod(data_ready_code);
|
||||
|
||||
// Process the response from Trainer
|
||||
while (true) {
|
||||
ProtocolCode recv_code;
|
||||
m_PipeOperator.Read(&recv_code, sizeof(recv_code));
|
||||
m_PipeOperator.read_pod(recv_code);
|
||||
|
||||
switch (recv_code) {
|
||||
case ProtocolCode::DATA_RECEIVED:
|
||||
case ProtocolCode::DATA_RECEIVED: {
|
||||
// Normal response, continue processing
|
||||
return false; // Not stopping
|
||||
case Basalt::Presenter::ProtocolCode::STOP:
|
||||
}
|
||||
case ProtocolCode::STOP_REQUEST: {
|
||||
// Trainer wants to stop
|
||||
m_Status = ClientStatus::Stop;
|
||||
// We sent response first
|
||||
ProtocolCode stop_response_code = ProtocolCode::STOP_RESPONSE;
|
||||
m_PipeOperator.write_pod(stop_response_code);
|
||||
// Set status and return.
|
||||
m_Status = CmdClientStatus::Stop;
|
||||
return true; // Should stop
|
||||
}
|
||||
default:
|
||||
throw std::runtime_error("unexpected code when running");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Basalt::Presenter
|
||||
} // namespace basalt::presenter::cmd_client
|
||||
Reference in New Issue
Block a user