From 3f7f67e198f9cced4d8289100a1ec894b9d4ee11 Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 15 Jun 2020 11:09:34 +0300 Subject: [PATCH] picloud start develop --- src_cloud/piccloudclient.cpp | 15 ++++++++++ src_main/cloud/piccloudclient.h | 13 +++++++-- utils/cloud_dispatcher/dispatcherclient.cpp | 28 ++++++++++++++++++ utils/cloud_dispatcher/dispatcherclient.h | 21 ++++++++++++++ utils/cloud_dispatcher/dispatcherserver.cpp | 32 +++++++++++++++++++++ utils/cloud_dispatcher/dispatcherserver.h | 20 +++++++++++++ utils/cloud_dispatcher/main.cpp | 11 +++---- 7 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 utils/cloud_dispatcher/dispatcherclient.cpp create mode 100644 utils/cloud_dispatcher/dispatcherclient.h create mode 100644 utils/cloud_dispatcher/dispatcherserver.cpp create mode 100644 utils/cloud_dispatcher/dispatcherserver.h diff --git a/src_cloud/piccloudclient.cpp b/src_cloud/piccloudclient.cpp index 6b7507ab..98fec593 100644 --- a/src_cloud/piccloudclient.cpp +++ b/src_cloud/piccloudclient.cpp @@ -23,3 +23,18 @@ PICloudClient::PICloudClient() { } + +PICloudClient::~PICloudClient() { + +} + + +bool PICloudClient::openDevice() { + +} + + +bool PICloudClient::closeDevice() { + +} + diff --git a/src_main/cloud/piccloudclient.h b/src_main/cloud/piccloudclient.h index 131555dd..943056b6 100644 --- a/src_main/cloud/piccloudclient.h +++ b/src_main/cloud/piccloudclient.h @@ -25,14 +25,23 @@ #include "piiodevice.h" +class PIEthernet; -class PIP_EXPORT PICloudClient { + +class PIP_EXPORT PICloudClient : public PIIODevice +{ + PIIODEVICE(PICloudClient) public: //! explicit PICloudClient(); + virtual ~PICloudClient(); + +protected: + bool openDevice(); + bool closeDevice(); private: - + PIEthernet * eth; }; #endif // PICCLOUDCLIENT_H diff --git a/utils/cloud_dispatcher/dispatcherclient.cpp b/utils/cloud_dispatcher/dispatcherclient.cpp new file mode 100644 index 00000000..83f3c02e --- /dev/null +++ b/utils/cloud_dispatcher/dispatcherclient.cpp @@ -0,0 +1,28 @@ +#include "dispatcherclient.h" + + +DispatcherClient::DispatcherClient(PIEthernet * eth_) { + eth = eth_; + eth->startThreadedRead(); + CONNECTU(eth, threadedReadEvent, this, readed); + CONNECTU(eth, disconnected, this, disconnected); + piCoutObj << "client connected" << eth->sendAddress(); +} + + +DispatcherClient::~DispatcherClient() { +} + + +void DispatcherClient::disconnected(bool withError) { + piCoutObj << "client disconnected" << eth->sendAddress(); + disconnectEvent(this); +} + + +void DispatcherClient::readed(uchar *data, int size) { + PIByteArray ba(data, size); + piCoutObj << "readed" << ba.toHex(); + eth->write(ba); +} + diff --git a/utils/cloud_dispatcher/dispatcherclient.h b/utils/cloud_dispatcher/dispatcherclient.h new file mode 100644 index 00000000..aa0e0c6f --- /dev/null +++ b/utils/cloud_dispatcher/dispatcherclient.h @@ -0,0 +1,21 @@ +#ifndef DISPATCHERCLIENT_H +#define DISPATCHERCLIENT_H + +#include "piethernet.h" + + +class DispatcherClient: public PIObject { + PIOBJECT(DispatcherClient) +public: + DispatcherClient(PIEthernet * eth_); + ~DispatcherClient(); + EVENT_HANDLER2(void, readed, uchar * , data, int, size); + EVENT_HANDLER1(void, disconnected, bool, withError); + EVENT1(disconnectEvent, DispatcherClient *, client) + +private: + PIEthernet * eth; +}; + + +#endif // DISPATCHERCLIENT_H diff --git a/utils/cloud_dispatcher/dispatcherserver.cpp b/utils/cloud_dispatcher/dispatcherserver.cpp new file mode 100644 index 00000000..40959cbf --- /dev/null +++ b/utils/cloud_dispatcher/dispatcherserver.cpp @@ -0,0 +1,32 @@ +#include "dispatcherserver.h" + + +DispatcherServer::DispatcherServer(PIEthernet::Address addr) { + eth = new PIEthernet(PIEthernet::TCP_Server); + eth->setParameter(PIEthernet::ReuseAddress); + CONNECTU(eth, newConnection, this, newConnection); + eth->listen(addr, true); + piCoutObj << eth << "server started" << addr; +} + + +DispatcherServer::~DispatcherServer() { + eth->close(); + piCoutObj << "server stoped"; + delete eth; +} + + +void DispatcherServer::disconnectClient(DispatcherClient *client) { + piCoutObj << "remove client" << client; + clients.removeOne(client); + delete client; +} + + +void DispatcherServer::newConnection(PIEthernet *cl) { + DispatcherClient * client = new DispatcherClient(cl); + piCoutObj << "add client" << client; + CONNECTU(client, disconnectEvent, this, disconnectClient); + clients.push_back(client); +} diff --git a/utils/cloud_dispatcher/dispatcherserver.h b/utils/cloud_dispatcher/dispatcherserver.h new file mode 100644 index 00000000..4edf2c23 --- /dev/null +++ b/utils/cloud_dispatcher/dispatcherserver.h @@ -0,0 +1,20 @@ +#ifndef DISPATCHERSERVER_H +#define DISPATCHERSERVER_H + +#include "dispatcherclient.h" + + +class DispatcherServer: public PIObject { + PIOBJECT(DispatcherServer) +public: + DispatcherServer(PIEthernet::Address addr); + ~DispatcherServer(); + EVENT_HANDLER1(void, newConnection, PIEthernet * , cl); + EVENT_HANDLER1(void, disconnectClient, DispatcherClient *, client); + +private: + PIEthernet * eth; + PIVector clients; +}; + +#endif // DISPATCHERSERVER_H diff --git a/utils/cloud_dispatcher/main.cpp b/utils/cloud_dispatcher/main.cpp index d85c147c..6a685a3d 100644 --- a/utils/cloud_dispatcher/main.cpp +++ b/utils/cloud_dispatcher/main.cpp @@ -19,12 +19,12 @@ #include "pip.h" #include "picrypt.h" +#include "dispatcherserver.h" using namespace PICoutManipulators; -PIString ip = "0.0.0.0"; -int port = 10101; +PIEthernet::Address addr = PIEthernet::Address("0.0.0.0", 10101); void usage() { piCout << Bold << "PIP Cloud Dispatcher"; @@ -49,10 +49,11 @@ int main (int argc, char * argv[]) { return 0; } if (cli.hasArgument("ip")) - ip = cli.argumentValue("ip"); + addr.setIP(cli.argumentValue("ip")); if (cli.hasArgument("port")) - port = cli.argumentValue("port").toInt(); - + addr.setPort(cli.argumentValue("port").toInt()); + DispatcherServer server(addr); + WAIT_FOR_EXIT return 0; }