Libspinscale: Initial top-level SMO port to coroutine framework
We haven't ported everything. Just the top-level methods. We'll dig in to the leaf stuff later. Surprisingly, this all went without any real difficulties. Runs like a charm on first try.
This commit is contained in:
@@ -17,8 +17,8 @@
|
||||
#include <boost/asio/deadline_timer.hpp>
|
||||
#include <boost/asio/posix/stream_descriptor.hpp>
|
||||
#include <opts.h>
|
||||
#include <spinscale/asynchronousContinuation.h>
|
||||
#include <spinscale/callback.h>
|
||||
#include <spinscale/cps/asynchronousContinuation.h>
|
||||
#include <spinscale/cps/callback.h>
|
||||
#include "device.h"
|
||||
#include "protocol.h"
|
||||
#include "core.h"
|
||||
@@ -124,15 +124,15 @@ Device::~Device()
|
||||
* This class manages the overall device connection process including handshake and heartbeat setup
|
||||
*/
|
||||
class Device::ConnectReq
|
||||
: public sscl::NonPostedAsynchronousContinuation<Device::connectReqCbFn>
|
||||
: public sscl::cps::NonPostedAsynchronousContinuation<Device::connectReqCbFn>
|
||||
{
|
||||
private:
|
||||
Device& device;
|
||||
boost::asio::deadline_timer delayTimer;
|
||||
|
||||
public:
|
||||
ConnectReq(Device& dev, sscl::Callback<Device::connectReqCbFn> cb)
|
||||
: sscl::NonPostedAsynchronousContinuation<Device::connectReqCbFn>(
|
||||
ConnectReq(Device& dev, sscl::cps::Callback<Device::connectReqCbFn> cb)
|
||||
: sscl::cps::NonPostedAsynchronousContinuation<Device::connectReqCbFn>(
|
||||
std::move(cb)), device(dev),
|
||||
delayTimer(dev.componentThread->getIoService())
|
||||
{}
|
||||
@@ -216,7 +216,7 @@ public:
|
||||
{ callOriginalCallback(false); }
|
||||
};
|
||||
|
||||
void Device::connectReq(sscl::Callback<Device::connectReqCbFn> callback)
|
||||
void Device::connectReq(sscl::cps::Callback<Device::connectReqCbFn> callback)
|
||||
{
|
||||
// Create the connection request object to hold state and callbacks
|
||||
auto request = std::make_shared<ConnectReq>(*this, std::move(callback));
|
||||
@@ -233,7 +233,7 @@ void Device::connectReq(sscl::Callback<Device::connectReqCbFn> callback)
|
||||
}
|
||||
|
||||
class Device::ConnectToKnownDeviceReq
|
||||
: public sscl::NonPostedAsynchronousContinuation<
|
||||
: public sscl::cps::NonPostedAsynchronousContinuation<
|
||||
Device::connectToKnownDeviceReqCbFn>
|
||||
{
|
||||
public:
|
||||
@@ -241,8 +241,8 @@ public:
|
||||
std::string deviceIP;
|
||||
std::shared_ptr<livoxProto1::comms::DiscoveredDevice> deviceInfo;
|
||||
|
||||
ConnectToKnownDeviceReq(Device& dev, sscl::Callback<Device::connectToKnownDeviceReqCbFn> cb)
|
||||
: sscl::NonPostedAsynchronousContinuation<
|
||||
ConnectToKnownDeviceReq(Device& dev, sscl::cps::Callback<Device::connectToKnownDeviceReqCbFn> cb)
|
||||
: sscl::cps::NonPostedAsynchronousContinuation<
|
||||
Device::connectToKnownDeviceReqCbFn>(std::move(cb)), device(dev)
|
||||
{}
|
||||
|
||||
@@ -269,7 +269,7 @@ public:
|
||||
* broadcastListener.
|
||||
*/
|
||||
void Device::connectToKnownDeviceReq(
|
||||
sscl::Callback<Device::connectToKnownDeviceReqCbFn> callback
|
||||
sscl::cps::Callback<Device::connectToKnownDeviceReqCbFn> callback
|
||||
)
|
||||
{
|
||||
// Create the connection request object to hold state and callbacks
|
||||
@@ -336,7 +336,7 @@ void Device::connectToKnownDeviceReq(
|
||||
}
|
||||
|
||||
class Device::ConnectByDeviceIdentifierReq
|
||||
: public sscl::NonPostedAsynchronousContinuation<
|
||||
: public sscl::cps::NonPostedAsynchronousContinuation<
|
||||
Device::connectByDeviceIdentifierReqCbFn>
|
||||
{
|
||||
public:
|
||||
@@ -344,8 +344,8 @@ public:
|
||||
std::string deviceIP;
|
||||
|
||||
ConnectByDeviceIdentifierReq(
|
||||
Device& dev, sscl::Callback<Device::connectByDeviceIdentifierReqCbFn> cb)
|
||||
: sscl::NonPostedAsynchronousContinuation<
|
||||
Device& dev, sscl::cps::Callback<Device::connectByDeviceIdentifierReqCbFn> cb)
|
||||
: sscl::cps::NonPostedAsynchronousContinuation<
|
||||
Device::connectByDeviceIdentifierReqCbFn>(
|
||||
std::move(cb)), device(dev)
|
||||
{}
|
||||
@@ -370,7 +370,7 @@ public:
|
||||
};
|
||||
|
||||
void Device::connectByDeviceIdentifierReq(
|
||||
sscl::Callback<Device::connectByDeviceIdentifierReqCbFn> callback
|
||||
sscl::cps::Callback<Device::connectByDeviceIdentifierReqCbFn> callback
|
||||
)
|
||||
{
|
||||
/** EXPLANATION:
|
||||
@@ -419,13 +419,13 @@ void Device::connectByDeviceIdentifierReq(
|
||||
}
|
||||
|
||||
class Device::ExecuteHandshakeReq
|
||||
: public sscl::NonPostedAsynchronousContinuation<
|
||||
: public sscl::cps::NonPostedAsynchronousContinuation<
|
||||
Device::executeHandshakeReqCbFn>
|
||||
{
|
||||
public:
|
||||
friend void Device::executeHandshakeReq(
|
||||
const std::string& deviceIP,
|
||||
sscl::Callback<Device::executeHandshakeReqCbFn> callback);
|
||||
sscl::cps::Callback<Device::executeHandshakeReqCbFn> callback);
|
||||
|
||||
enum class SocketState
|
||||
{
|
||||
@@ -459,8 +459,8 @@ public:
|
||||
Device& dev, const std::string& deviceIP,
|
||||
std::shared_ptr<boost::asio::posix::stream_descriptor>
|
||||
&cmdEndpointFdDesc,
|
||||
sscl::Callback<Device::executeHandshakeReqCbFn> cb)
|
||||
: sscl::NonPostedAsynchronousContinuation<Device::executeHandshakeReqCbFn>(
|
||||
sscl::cps::Callback<Device::executeHandshakeReqCbFn> cb)
|
||||
: sscl::cps::NonPostedAsynchronousContinuation<Device::executeHandshakeReqCbFn>(
|
||||
std::move(cb)),
|
||||
device(dev), deviceIP(deviceIP),
|
||||
cmdEndpointFdDesc(cmdEndpointFdDesc),
|
||||
@@ -753,7 +753,7 @@ private:
|
||||
|
||||
void Device::executeHandshakeReq(
|
||||
const std::string& deviceIP,
|
||||
sscl::Callback<Device::executeHandshakeReqCbFn> callback
|
||||
sscl::cps::Callback<Device::executeHandshakeReqCbFn> callback
|
||||
)
|
||||
{
|
||||
// Get the command endpoint from the UdpCommandDemuxer
|
||||
@@ -803,7 +803,7 @@ void Device::executeHandshakeReq(
|
||||
}
|
||||
}
|
||||
|
||||
void Device::disconnectReq(sscl::Callback<Device::disconnectReqCbFn> callback)
|
||||
void Device::disconnectReq(sscl::cps::Callback<Device::disconnectReqCbFn> callback)
|
||||
{
|
||||
// Stop heartbeat first
|
||||
stopHeartbeat();
|
||||
@@ -1331,7 +1331,7 @@ std::optional<std::string> Device::getSmoIp(const std::string& deviceIP)
|
||||
// Base class for both enable and disable pcloud data requests
|
||||
template<typename CallbackType>
|
||||
class EnDisablePcloudDataReq
|
||||
: public sscl::NonPostedAsynchronousContinuation<CallbackType>
|
||||
: public sscl::cps::NonPostedAsynchronousContinuation<CallbackType>
|
||||
{
|
||||
public:
|
||||
enum class SocketState
|
||||
@@ -1362,8 +1362,8 @@ public:
|
||||
protected:
|
||||
EnDisablePcloudDataReq(
|
||||
Device& dev,
|
||||
sscl::Callback<CallbackType> cb)
|
||||
: sscl::NonPostedAsynchronousContinuation<CallbackType>(std::move(cb)),
|
||||
sscl::cps::Callback<CallbackType> cb)
|
||||
: sscl::cps::NonPostedAsynchronousContinuation<CallbackType>(std::move(cb)),
|
||||
device(dev),
|
||||
timeoutTimer(device.componentThread->getIoService())
|
||||
{}
|
||||
@@ -1608,11 +1608,11 @@ class Device::EnablePcloudDataReq
|
||||
{
|
||||
public:
|
||||
friend void Device::enablePcloudDataReq(
|
||||
sscl::Callback<Device::enablePcloudDataReqCbFn> callback);
|
||||
sscl::cps::Callback<Device::enablePcloudDataReqCbFn> callback);
|
||||
|
||||
EnablePcloudDataReq(
|
||||
Device& dev,
|
||||
sscl::Callback<Device::enablePcloudDataReqCbFn> cb)
|
||||
sscl::cps::Callback<Device::enablePcloudDataReqCbFn> cb)
|
||||
: EnDisablePcloudDataReq<Device::enablePcloudDataReqCbFn>(dev, std::move(cb))
|
||||
{}
|
||||
|
||||
@@ -1643,11 +1643,11 @@ class Device::DisablePcloudDataReq
|
||||
{
|
||||
public:
|
||||
friend void Device::disablePcloudDataReq(
|
||||
sscl::Callback<Device::disablePcloudDataReqCbFn> callback);
|
||||
sscl::cps::Callback<Device::disablePcloudDataReqCbFn> callback);
|
||||
|
||||
DisablePcloudDataReq(
|
||||
Device& dev,
|
||||
sscl::Callback<Device::disablePcloudDataReqCbFn> cb)
|
||||
sscl::cps::Callback<Device::disablePcloudDataReqCbFn> cb)
|
||||
: EnDisablePcloudDataReq<Device::disablePcloudDataReqCbFn>(
|
||||
dev, std::move(cb))
|
||||
{}
|
||||
@@ -1675,7 +1675,7 @@ private:
|
||||
};
|
||||
|
||||
void Device::enablePcloudDataReq(
|
||||
sscl::Callback<Device::enablePcloudDataReqCbFn> callback
|
||||
sscl::cps::Callback<Device::enablePcloudDataReqCbFn> callback
|
||||
)
|
||||
{
|
||||
auto request = std::make_shared<EnablePcloudDataReq>(
|
||||
@@ -1702,7 +1702,7 @@ void Device::enablePcloudDataReq(
|
||||
}
|
||||
|
||||
void Device::disablePcloudDataReq(
|
||||
sscl::Callback<Device::disablePcloudDataReqCbFn> callback
|
||||
sscl::cps::Callback<Device::disablePcloudDataReqCbFn> callback
|
||||
)
|
||||
{
|
||||
auto request = std::make_shared<DisablePcloudDataReq>(
|
||||
@@ -1858,7 +1858,7 @@ void Device::unregisterUdpCommandHandler(
|
||||
|
||||
// SetReturnModeReq continuation class
|
||||
class Device::SetReturnModeReq
|
||||
: public sscl::NonPostedAsynchronousContinuation<Device::setReturnModeReqCbFn>
|
||||
: public sscl::cps::NonPostedAsynchronousContinuation<Device::setReturnModeReqCbFn>
|
||||
{
|
||||
public:
|
||||
enum class SocketState
|
||||
@@ -1890,12 +1890,12 @@ public:
|
||||
public:
|
||||
friend void Device::setReturnModeReq(
|
||||
uint8_t returnMode,
|
||||
sscl::Callback<Device::setReturnModeReqCbFn> callback);
|
||||
sscl::cps::Callback<Device::setReturnModeReqCbFn> callback);
|
||||
|
||||
SetReturnModeReq(
|
||||
Device& dev, uint8_t mode,
|
||||
sscl::Callback<Device::setReturnModeReqCbFn> cb)
|
||||
: sscl::NonPostedAsynchronousContinuation<Device::setReturnModeReqCbFn>(
|
||||
sscl::cps::Callback<Device::setReturnModeReqCbFn> cb)
|
||||
: sscl::cps::NonPostedAsynchronousContinuation<Device::setReturnModeReqCbFn>(
|
||||
std::move(cb)),
|
||||
device(dev), returnMode(mode),
|
||||
timeoutTimer(device.componentThread->getIoService())
|
||||
@@ -2107,7 +2107,7 @@ public:
|
||||
|
||||
// GetReturnModeReq continuation class
|
||||
class Device::GetReturnModeReq
|
||||
: public sscl::NonPostedAsynchronousContinuation<Device::getReturnModeReqCbFn>
|
||||
: public sscl::cps::NonPostedAsynchronousContinuation<Device::getReturnModeReqCbFn>
|
||||
{
|
||||
public:
|
||||
enum class SocketState
|
||||
@@ -2137,12 +2137,12 @@ public:
|
||||
|
||||
public:
|
||||
friend void Device::getReturnModeReq(
|
||||
sscl::Callback<Device::getReturnModeReqCbFn> callback);
|
||||
sscl::cps::Callback<Device::getReturnModeReqCbFn> callback);
|
||||
|
||||
GetReturnModeReq(
|
||||
Device& dev,
|
||||
sscl::Callback<Device::getReturnModeReqCbFn> cb)
|
||||
: sscl::NonPostedAsynchronousContinuation<Device::getReturnModeReqCbFn>(
|
||||
sscl::cps::Callback<Device::getReturnModeReqCbFn> cb)
|
||||
: sscl::cps::NonPostedAsynchronousContinuation<Device::getReturnModeReqCbFn>(
|
||||
std::move(cb)),
|
||||
device(dev),
|
||||
timeoutTimer(device.componentThread->getIoService())
|
||||
@@ -2351,7 +2351,7 @@ public:
|
||||
|
||||
void Device::setReturnModeReq(
|
||||
uint8_t returnMode,
|
||||
sscl::Callback<Device::setReturnModeReqCbFn> callback
|
||||
sscl::cps::Callback<Device::setReturnModeReqCbFn> callback
|
||||
)
|
||||
{
|
||||
auto request = std::make_shared<SetReturnModeReq>(
|
||||
@@ -2378,7 +2378,7 @@ void Device::setReturnModeReq(
|
||||
}
|
||||
|
||||
void Device::getReturnModeReq(
|
||||
sscl::Callback<Device::getReturnModeReqCbFn> callback
|
||||
sscl::cps::Callback<Device::getReturnModeReqCbFn> callback
|
||||
)
|
||||
{
|
||||
auto request = std::make_shared<GetReturnModeReq>(
|
||||
|
||||
Reference in New Issue
Block a user