Patronum
serviceprivate.cpp
Go to the documentation of this file.
1 #include "serviceprivate.h"
2 
3 #include "iservice.h"
4 #include "icontroller.h"
5 #include "localsocket.h"
6 #include "package.h"
7 #include <quasarapp.h>
8 
9 namespace Patronum {
10 
11 Patronum::ServicePrivate::ServicePrivate(const QString &name, IController *controller, IService *service, QObject *parent):
12  QObject(parent) {
13  _socket = new LocalSocket(name);
14  _service = service;
15  _controller = controller;
16 
17  QObject::connect(_socket, &LocalSocket::sigReceve,
18  this, &ServicePrivate::handleReceve);
19 
20 }
21 
22 bool ServicePrivate::sendCmdResult(const QVariantMap &result) {
23 
24  if (!_socket->isValid()) {
25  QuasarAppUtils::Params::log("scoket is closed!",
26  QuasarAppUtils::Error);
27  return false;
28  }
29 
30  QByteArray responce;
31  QDataStream stream(&responce, QIODevice::WriteOnly);
32 
33  stream << Command::FeatureResponce << result;
34 
35  return _socket->send(responce);
36 }
37 
39  if (!_socket->isValid()) {
40  QuasarAppUtils::Params::log("scoket is closed!",
41  QuasarAppUtils::Error);
42  return false;
43  }
44 
45  QByteArray responce;
46  QDataStream stream(&responce, QIODevice::WriteOnly);
47 
48  stream << Command::FeaturesRequest;
49 
50  return _socket->send(responce);
51 }
52 
53 bool ServicePrivate::sendCmd(const QList<Feature> &result) {
54  if (!_socket->isValid()) {
55  QuasarAppUtils::Params::log("scoket is closed!",
56  QuasarAppUtils::Error);
57  return false;
58  }
59 
60  QByteArray responce;
61  QDataStream stream(&responce, QIODevice::WriteOnly);
62 
63  stream << Command::Feature << result;
64 
65  return _socket->send(responce);
66 }
67 
68 void ServicePrivate::handleReceve(QByteArray data) {
69 
70  if (data.size() < 2) {
71  return;
72  }
73 
74  const Package *package = reinterpret_cast<const Package *>( data.data());
75 
76  switch (package->cmd) {
77 
79 
80  if (!_service) {
81  QuasarAppUtils::Params::log("System error, service is not inited!",
82  QuasarAppUtils::Error);
83  break;
84  }
85 
86  if (!_socket->isValid()) {
87  QuasarAppUtils::Params::log("scoket is closed!",
88  QuasarAppUtils::Error);
89  break;
90  }
91 
92  QList<Feature> features = _service->supportedFeatures();
93  QByteArray sendData;
94  QDataStream stream(&sendData, QIODevice::WriteOnly);
95 
96  stream << Command::Features << features;
97  if (!_socket->send(sendData)) {
98  QuasarAppUtils::Params::log("scoket is closed!",
99  QuasarAppUtils::Error);
100  }
101 
102  break;
103 
104  }
105  case Command::Features: {
106 
107  if (!_controller) {
108  QuasarAppUtils::Params::log("System error, controller is not inited!",
109  QuasarAppUtils::Error);
110  break;
111  }
112 
113  QDataStream stream(package->data);
114 
115  QList<Feature> features;
116  stream >> features;
117 
118  _controller->handleFeatures(features);
119 
120  break;
121 
122  }
123  case Command::Feature: {
124  if (!_service) {
125  QuasarAppUtils::Params::log("System error, service is not inited!",
126  QuasarAppUtils::Error);
127  break;
128  }
129 
130  QDataStream stream(package->data);
131 
132  QList<Feature> feature;
133  stream >> feature;
134  _service->handleReceve(feature);
135 
136  break;
137 
138  }
139 
141  if (!_controller) {
142  QuasarAppUtils::Params::log("System error, controller is not inited!",
143  QuasarAppUtils::Error);
144  break;
145  }
146 
147  QDataStream stream(package->data);
148 
149  QVariantMap feature;
150  stream >> feature;
151  _controller->handleResponce(feature);
152 
153  break;
154 
155  }
156  default: {
157  QuasarAppUtils::Params::log("Wrong command!",
158  QuasarAppUtils::Error);
159  break;
160  }
161 
162  }
163 
164 }
165 
166 }
ServicePrivate(const QString &name, IController *controller=nullptr, IService *service=nullptr, QObject *parent=nullptr)
The LocalSocket class this socket work only with locale data.
Definition: localsocket.h:15
void sigReceve(QByteArray data)
bool send(const QByteArray &data)
send - send data to service
Definition: localsocket.cpp:18
bool isValid() const
isValid - check validation of socket
Definition: localsocket.cpp:26
bool sendCmd(const QList< Feature > &result)
bool sendCmdResult(const QVariantMap &result)