1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "CommandLine.h"
17
18 #include <algorithm>
19 #include <regex>
20 #include <sstream>
21
22 #include "CommandLineInterface.h"
23 #include "CommandParser.h"
24 #include "Interrupter.h"
25 #include "JsApp.h"
26 #include "JsAppImpl.h"
27 #include "JsonReader.h"
28 #include "LanguageManagerImpl.h"
29 #include "ModelConfig.h"
30 #include "ModelManager.h"
31 #include "MouseInputImpl.h"
32 #include "MouseWheelImpl.h"
33 #include "KeyInputImpl.h"
34 #include "PreviewerEngineLog.h"
35 #include "SharedData.h"
36 #include "VirtualMessageImpl.h"
37 #include "VirtualScreenImpl.h"
38
CommandLine(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)39 CommandLine::CommandLine(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
40 : args(arg), cliSocket(socket), type(commandType), commandName("")
41 {
42 }
43
~CommandLine()44 CommandLine::~CommandLine()
45 {
46 }
47
CheckAndRun()48 void CommandLine::CheckAndRun()
49 {
50 if (!IsArgValid()) {
51 ELOG("CheckAndRun: invalid command params");
52 SetCommandResult("result", JsonReader::CreateBool(false));
53 SendResult();
54 return;
55 }
56 Run();
57 SendResult();
58 }
59
SendResult()60 void CommandLine::SendResult()
61 {
62 if (commandResult.IsNull() || !commandResult.IsValid()) {
63 return;
64 }
65 cliSocket << commandResult.ToStyledString();
66 ELOG("SendResult commandResult: %s", commandResult.ToStyledString().c_str());
67 commandResult.Clear();
68 }
69
RunAndSendResultToManager()70 void CommandLine::RunAndSendResultToManager()
71 {
72 Run();
73 SendResultToManager();
74 }
75
SendResultToManager()76 void CommandLine::SendResultToManager()
77 {
78 if (commandResultToManager.IsNull() || !commandResultToManager.IsValid()) {
79 return;
80 }
81 cliSocket << commandResultToManager.ToStyledString();
82 commandResultToManager.Clear();
83 }
84
IsArgValid() const85 bool CommandLine::IsArgValid() const
86 {
87 if (type == CommandType::GET) {
88 return IsGetArgValid();
89 }
90 if (type == CommandType::SET) {
91 return IsSetArgValid();
92 }
93 if (type == CommandType::ACTION) {
94 return IsActionArgValid();
95 }
96 return true;
97 }
98
ToUint8(std::string str) const99 uint8_t CommandLine::ToUint8(std::string str) const
100 {
101 int value = atoi(str.data());
102 if (value > UINT8_MAX) {
103 ELOG("CommandLine::ToUint8 value is overflow, value: %d", value);
104 }
105 return static_cast<uint8_t>(value);
106 }
107
SetCommandName(std::string command)108 void CommandLine::SetCommandName(std::string command)
109 {
110 this->commandName = command;
111 }
112
SetCommandResult(const std::string & resultType,const Json2::Value & resultContent)113 void CommandLine::SetCommandResult(const std::string& resultType, const Json2::Value& resultContent)
114 {
115 this->commandResult.Add("version", CommandLineInterface::COMMAND_VERSION.c_str());
116 this->commandResult.Add("command", this->commandName.c_str());
117 this->commandResult.Add(resultType.c_str(), resultContent);
118 }
119
SetResultToManager(const std::string & resultType,const Json2::Value & resultContent,const std::string & messageType)120 void CommandLine::SetResultToManager(const std::string& resultType,
121 const Json2::Value& resultContent,
122 const std::string& messageType)
123 {
124 this->commandResultToManager.Add("MessageType", messageType.c_str());
125 this->commandResultToManager.Add(resultType.c_str(), resultContent);
126 }
127
Run()128 void CommandLine::Run()
129 {
130 if (type == CommandType::GET) {
131 RunGet();
132 } else if (type == CommandType::SET) {
133 RunSet();
134 } else if (type == CommandType::ACTION) {
135 RunAction();
136 }
137 }
138
IsBoolType(std::string arg) const139 bool CommandLine::IsBoolType(std::string arg) const
140 {
141 std::regex tofrx("^(true)|(false)$");
142 if (regex_match(arg, tofrx)) {
143 return true;
144 }
145 return false;
146 }
147
IsIntType(std::string arg) const148 bool CommandLine::IsIntType(std::string arg) const
149 {
150 std::regex isInt("^\\d+$");
151 return regex_match(arg, isInt);
152 }
153
IsOneDigitFloatType(std::string arg,bool allowNegativeNumber) const154 bool CommandLine::IsOneDigitFloatType(std::string arg, bool allowNegativeNumber) const
155 {
156 if (allowNegativeNumber) {
157 std::regex isFloat("^-?\\d+(\\.\\d+)?$");
158 return regex_match(arg, isFloat);
159 } else {
160 std::regex isFloat("^\\d(\\.\\d+)?$");
161 return regex_match(arg, isFloat);
162 }
163 }
164
SetEventParams(EventParams & params)165 void TouchAndMouseCommand::SetEventParams(EventParams& params)
166 {
167 if (CommandParser::GetInstance().GetScreenMode() == CommandParser::ScreenMode::STATIC) {
168 return;
169 }
170 MouseInputImpl::GetInstance().SetMousePosition(params.x, params.y);
171 MouseInputImpl::GetInstance().SetMouseStatus(params.type);
172 MouseInputImpl::GetInstance().SetMouseButton(params.button);
173 MouseInputImpl::GetInstance().SetMouseAction(params.action);
174 MouseInputImpl::GetInstance().SetSourceType(params.sourceType);
175 MouseInputImpl::GetInstance().SetSourceTool(params.sourceTool);
176 MouseInputImpl::GetInstance().SetPressedBtns(params.pressedBtnsVec);
177 MouseInputImpl::GetInstance().SetAxisValues(params.axisVec);
178 MouseInputImpl::GetInstance().DispatchOsTouchEvent();
179 std::stringstream ss;
180 ss << "[";
181 for (double val : params.axisVec) {
182 ss << " " << val << " ";
183 }
184 ss << "]" << std::endl;
185 ILOG("%s(%f,%f,%d,%d,%d,%d,%d,%d,%d,%s)", params.name.c_str(), params.x, params.y, params.type, params.button,
186 params.action, params.sourceType, params.sourceTool, params.pressedBtnsVec.size(), params.axisVec.size(),
187 ss.str().c_str());
188 }
189
IsActionArgValid() const190 bool TouchPressCommand::IsActionArgValid() const
191 {
192 if (args.IsNull() || !args.IsMember("x") || !args.IsMember("y") ||
193 !args["x"].IsInt() || !args["y"].IsInt()) {
194 return false;
195 }
196 int32_t pointX = args["x"].AsInt();
197 int32_t pointY = args["y"].AsInt();
198 if (pointX < 0 || pointX > VirtualScreenImpl::GetInstance().GetCurrentWidth()) {
199 ELOG("X coordinate range %d ~ %d", 0, VirtualScreenImpl::GetInstance().GetCurrentWidth());
200 return false;
201 }
202 if (pointY < 0 || pointY > VirtualScreenImpl::GetInstance().GetCurrentHeight()) {
203 ELOG("Y coordinate range %d ~ %d", 0, VirtualScreenImpl::GetInstance().GetCurrentHeight());
204 return false;
205 }
206 return true;
207 }
208
TouchPressCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)209 TouchPressCommand::TouchPressCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
210 : CommandLine(commandType, arg, socket)
211 {
212 }
213
RunAction()214 void TouchPressCommand::RunAction()
215 {
216 int type = 0;
217 EventParams param;
218 param.x = args["x"].AsDouble();
219 param.y = args["y"].AsDouble();
220 param.type = type;
221 param.name = "TouchPress";
222 param.button = MouseInputImpl::GetInstance().defaultButton;
223 param.action = MouseInputImpl::GetInstance().defaultAction;
224 param.sourceType = MouseInputImpl::GetInstance().defaultSourceType;
225 param.sourceTool = MouseInputImpl::GetInstance().defaultSourceTool;
226 SetEventParams(param);
227 SetCommandResult("result", JsonReader::CreateBool(true));
228 }
229
IsActionArgValid() const230 bool MouseWheelCommand::IsActionArgValid() const
231 {
232 if (args.IsNull() || !args.IsMember("rotate") || !args["rotate"].IsDouble()) {
233 return false;
234 }
235 return true;
236 }
237
MouseWheelCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)238 MouseWheelCommand::MouseWheelCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
239 : CommandLine(commandType, arg, socket)
240 {
241 }
242
RunAction()243 void MouseWheelCommand::RunAction()
244 {
245 if (CommandParser::GetInstance().GetScreenMode() == CommandParser::ScreenMode::STATIC) {
246 return;
247 }
248 MouseWheelImpl::GetInstance().SetRotate(args["rotate"].AsDouble());
249 SetCommandResult("result", JsonReader::CreateBool(true));
250 ILOG("CrownRotate (%f)", args["rotate"].AsDouble());
251 }
252
IsActionArgValid() const253 bool TouchReleaseCommand::IsActionArgValid() const
254 {
255 if (args.IsNull() || !args.IsMember("x") || !args.IsMember("y") ||
256 !args["x"].IsInt() || !args["y"].IsInt()) {
257 return false;
258 }
259 int32_t pX = args["x"].AsInt();
260 int32_t pY = args["y"].AsInt();
261 if (pY < 0 || pY > VirtualScreenImpl::GetInstance().GetCurrentHeight()) {
262 ELOG("Y coordinate range %d ~ %d", 0, VirtualScreenImpl::GetInstance().GetCurrentHeight());
263 return false;
264 }
265 if (pX < 0 || pX > VirtualScreenImpl::GetInstance().GetCurrentWidth()) {
266 ELOG("X coordinate range %d ~ %d", 0, VirtualScreenImpl::GetInstance().GetCurrentWidth());
267 return false;
268 }
269 return true;
270 }
271
TouchReleaseCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)272 TouchReleaseCommand::TouchReleaseCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
273 : CommandLine(commandType, arg, socket)
274 {
275 }
276
RunAction()277 void TouchReleaseCommand::RunAction()
278 {
279 int type = 1;
280 EventParams param;
281 param.x = args["x"].AsDouble();
282 param.y = args["y"].AsDouble();
283 param.type = type;
284 param.name = "TouchRelease";
285 param.button = MouseInputImpl::GetInstance().defaultButton;
286 param.action = MouseInputImpl::GetInstance().defaultAction;
287 param.sourceType = MouseInputImpl::GetInstance().defaultSourceType;
288 param.sourceTool = MouseInputImpl::GetInstance().defaultSourceTool;
289 SetEventParams(param);
290 SetCommandResult("result", JsonReader::CreateBool(true));
291 }
292
IsActionArgValid() const293 bool TouchMoveCommand::IsActionArgValid() const
294 {
295 if (args.IsNull() || !args.IsMember("x") || !args.IsMember("y") ||
296 !args["x"].IsInt() || !args["y"].IsInt()) {
297 return false;
298 }
299 int32_t pX = args["x"].AsInt();
300 int32_t pY = args["y"].AsInt();
301 if (pX < 0 || pX > VirtualScreenImpl::GetInstance().GetCurrentWidth()) {
302 ELOG("X coordinate range %d ~ %d", 0, VirtualScreenImpl::GetInstance().GetCurrentWidth());
303 return false;
304 }
305 if (pY < 0 || pY > VirtualScreenImpl::GetInstance().GetCurrentHeight()) {
306 ELOG("Y coordinate range %d ~ %d", 0, VirtualScreenImpl::GetInstance().GetCurrentHeight());
307 return false;
308 }
309 return true;
310 }
311
TouchMoveCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)312 TouchMoveCommand::TouchMoveCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
313 : CommandLine(commandType, arg, socket)
314 {
315 }
316
RunAction()317 void TouchMoveCommand::RunAction()
318 {
319 int type = 2;
320 EventParams param;
321 param.x = args["x"].AsDouble();
322 param.y = args["y"].AsDouble();
323 param.type = type;
324 param.name = "TouchMove";
325 param.button = MouseInputImpl::GetInstance().defaultButton;
326 param.action = MouseInputImpl::GetInstance().defaultAction;
327 param.sourceType = MouseInputImpl::GetInstance().defaultSourceType;
328 param.sourceTool = MouseInputImpl::GetInstance().defaultSourceTool;
329 SetEventParams(param);
330 SetCommandResult("result", JsonReader::CreateBool(true));
331 }
332
PowerCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)333 PowerCommand::PowerCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
334 : CommandLine(commandType, arg, socket)
335 {
336 }
337
IsSetArgValid() const338 bool PowerCommand::IsSetArgValid() const
339 {
340 if (args.IsNull() || !args.IsMember("Power") || !args["Power"].IsDouble()) {
341 ELOG("Invalid number of arguments!");
342 return false;
343 }
344 double val = args["Power"].AsDouble();
345 if (!SharedData<double>::IsValid(SharedDataType::BATTERY_LEVEL, val)) {
346 ELOG("PowerCommand invalid value: %f", val);
347 return false;
348 }
349 return true;
350 }
351
RunGet()352 void PowerCommand::RunGet()
353 {
354 double power = SharedData<double>::GetData(SharedDataType::BATTERY_LEVEL);
355 Json2::Value resultContent = JsonReader::CreateObject();
356 resultContent.Add("Power", power);
357 SetCommandResult("result", resultContent);
358 ILOG("Get power run finished");
359 }
360
RunSet()361 void PowerCommand::RunSet()
362 {
363 double val = args["Power"].AsDouble();
364 SharedData<double>::SetData(SharedDataType::BATTERY_LEVEL, val);
365 SetCommandResult("result", JsonReader::CreateBool(true));
366 ILOG("Set power run finished, the value is: %f", val);
367 }
368
VolumeCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)369 VolumeCommand::VolumeCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
370 : CommandLine(commandType, arg, socket)
371 {
372 }
373
IsSetArgValid() const374 bool VolumeCommand::IsSetArgValid() const
375 {
376 return true;
377 }
378
RunGet()379 void VolumeCommand::RunGet()
380 {
381 SetCommandResult("result", JsonReader::CreateString("Command offline"));
382 ILOG("Command offline");
383 }
384
RunSet()385 void VolumeCommand::RunSet()
386 {
387 SetCommandResult("result", JsonReader::CreateString("Command offline"));
388 ILOG("Command offline");
389 }
390
BarometerCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)391 BarometerCommand::BarometerCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
392 : CommandLine(commandType, arg, socket)
393 {
394 }
395
IsSetArgValid() const396 bool BarometerCommand::IsSetArgValid() const
397 {
398 if (args.IsNull() || !args.IsMember("Barometer") || !args["Barometer"].IsUInt()) {
399 ELOG("Invalid number of arguments!");
400 return false;
401 }
402 uint32_t val = args["Barometer"].AsUInt();
403 if (!SharedData<uint32_t>::IsValid(SharedDataType::PRESSURE_VALUE, val)) {
404 ELOG("Barometer invalid value: %d", val);
405 return false;
406 }
407 return true;
408 }
409
RunGet()410 void BarometerCommand::RunGet()
411 {
412 int barometer = static_cast<int>(SharedData<uint32_t>::GetData(SharedDataType::PRESSURE_VALUE));
413 Json2::Value resultContent = JsonReader::CreateObject();
414 resultContent.Add("Barometer", barometer);
415 SetCommandResult("result", resultContent);
416 ILOG("Get barometer run finished");
417 }
418
RunSet()419 void BarometerCommand::RunSet()
420 {
421 uint32_t val = args["Barometer"].AsUInt();
422 SharedData<uint32_t>::SetData(SharedDataType::PRESSURE_VALUE, val);
423 SetCommandResult("result", JsonReader::CreateBool(true));
424 ILOG("Set barometer run finished, the value is: %d", val);
425 }
426
ResolutionSwitchCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)427 ResolutionSwitchCommand::ResolutionSwitchCommand(CommandType commandType,
428 const Json2::Value& arg,
429 const LocalSocket& socket)
430 : CommandLine(commandType, arg, socket)
431 {
432 }
433
IsSetArgValid() const434 bool ResolutionSwitchCommand::IsSetArgValid() const
435 {
436 if (args.IsNull() || !args.IsMember("originWidth") || !args.IsMember("originHeight") || !args.IsMember("width") ||
437 !args.IsMember("height") || !args.IsMember("screenDensity")) {
438 ELOG("Invalid param of arguments!");
439 return false;
440 }
441 if (!args["originWidth"].IsInt() || !args["originHeight"].IsInt() ||
442 !args["screenDensity"].IsInt() || !args["width"].IsInt() || !args["height"].IsInt()) {
443 ELOG("Invalid number of arguments!");
444 return false;
445 }
446 if (!IsIntValValid()) {
447 return false;
448 }
449 if (args.IsMember("reason")) {
450 if (!args["reason"].IsString()) {
451 return false;
452 }
453 std::string reason = args["reason"].AsString();
454 if (reason != "rotation" && reason != "resize" && reason != "undefined") {
455 ELOG("Invalid value of reason!");
456 return false;
457 }
458 }
459 return true;
460 }
461
IsIntValValid() const462 bool ResolutionSwitchCommand::IsIntValValid() const
463 {
464 if (args["originWidth"].AsInt() < minWidth || args["originWidth"].AsInt() > maxWidth ||
465 args["originHeight"].AsInt() < minWidth || args["originHeight"].AsInt() > maxWidth ||
466 args["width"].AsInt() < minWidth || args["width"].AsInt() > maxWidth ||
467 args["height"].AsInt() < minWidth || args["height"].AsInt() > maxWidth) {
468 ELOG("width or height is out of range %d-%d", minWidth, maxWidth);
469 return false;
470 }
471 if (args["screenDensity"].AsInt() < minDpi || args["screenDensity"].AsInt() > maxDpi) {
472 ELOG("screenDensity is out of range %d-%d", minDpi, maxDpi);
473 return false;
474 }
475 return true;
476 }
477
RunSet()478 void ResolutionSwitchCommand::RunSet()
479 {
480 int32_t originWidth = args["originWidth"].AsInt();
481 int32_t originHeight = args["originHeight"].AsInt();
482 int32_t width = args["width"].AsInt();
483 int32_t height = args["height"].AsInt();
484 int32_t screenDensity = args["screenDensity"].AsInt();
485 std::string reason = "undefined";
486 if (args.IsMember("reason")) {
487 reason = args["reason"].AsString();
488 }
489 ResolutionParam param(originWidth, originHeight, width, height);
490 JsAppImpl::GetInstance().ResolutionChanged(param, screenDensity, reason);
491 SetCommandResult("result", JsonReader::CreateBool(true));
492 ILOG("ResolutionSwitch run finished.");
493 }
494
OrientationCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)495 OrientationCommand::OrientationCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
496 : CommandLine(commandType, arg, socket)
497 {
498 }
499
IsSetArgValid() const500 bool OrientationCommand::IsSetArgValid() const
501 {
502 if (args.IsNull() || !args.IsMember("Orientation") || !args["Orientation"].IsString()) {
503 ELOG("Invalid number of arguments!");
504 return false;
505 }
506 if (args["Orientation"].AsString() != "portrait" && args["Orientation"].AsString() != "landscape") {
507 ELOG("Orientation just support [portrait,landscape].");
508 return false;
509 }
510 return true;
511 }
512
RunSet()513 void OrientationCommand::RunSet()
514 {
515 std::string commandOrientation = args["Orientation"].AsString();
516 std::string currentOrientation = JsAppImpl::GetInstance().GetOrientation();
517 if (commandOrientation != currentOrientation) {
518 JsAppImpl::GetInstance().OrientationChanged(commandOrientation);
519 }
520 SetCommandResult("result", JsonReader::CreateBool(true));
521 ILOG("Set Orientation run finished, Orientation is: %s", args["Orientation"].AsString().c_str());
522 }
523
ColorModeCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)524 ColorModeCommand::ColorModeCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
525 : CommandLine(commandType, arg, socket)
526 {
527 }
528
IsSetArgValid() const529 bool ColorModeCommand::IsSetArgValid() const
530 {
531 if (args.IsNull() || !args.IsMember("ColorMode") || !args["ColorMode"].IsString()) {
532 ELOG("Invalid number of arguments!");
533 return false;
534 }
535
536 if (args["ColorMode"].AsString() != "light" && args["ColorMode"].AsString() != "dark") {
537 ELOG("ColorMode just support [light,dark]");
538 return false;
539 }
540 return true;
541 }
542
RunSet()543 void ColorModeCommand::RunSet()
544 {
545 std::string commandColorMode = args["ColorMode"].AsString();
546 std::string currentColorMode = JsAppImpl::GetInstance().GetColorMode();
547 if (commandColorMode != currentColorMode) {
548 JsAppImpl::GetInstance().SetArgsColorMode(args["ColorMode"].AsString());
549 JsAppImpl::GetInstance().ColorModeChanged(commandColorMode);
550 }
551 SetCommandResult("result", JsonReader::CreateBool(true));
552 ILOG("Set ColorMode run finished, ColorMode is: %s", args["ColorMode"].AsString().c_str());
553 }
554
FontSelectCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)555 FontSelectCommand::FontSelectCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
556 : CommandLine(commandType, arg, socket)
557 {
558 }
559
IsSetArgValid() const560 bool FontSelectCommand::IsSetArgValid() const
561 {
562 if (args.IsNull() || !args.IsMember("FontSelect") || !args["FontSelect"].IsBool()) {
563 ELOG("Invalid number of arguments!");
564 return false;
565 }
566 return true;
567 }
568
RunSet()569 void FontSelectCommand::RunSet()
570 {
571 SetCommandResult("result", JsonReader::CreateBool(true));
572 ILOG("FontSelect finished, currentSelect is: %s", args["FontSelect"].AsBool() ? "true" : "false");
573 }
574
MemoryRefreshCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)575 MemoryRefreshCommand::MemoryRefreshCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
576 : CommandLine(commandType, arg, socket)
577 {
578 }
579
IsSetArgValid() const580 bool MemoryRefreshCommand::IsSetArgValid() const
581 {
582 if (args.IsNull()) {
583 ELOG("Invalid MemoryRefresh of arguments!");
584 return false;
585 }
586 return true;
587 }
588
RunSet()589 void MemoryRefreshCommand::RunSet()
590 {
591 ILOG("MemoryRefreshCommand begin.");
592 bool ret = JsAppImpl::GetInstance().MemoryRefresh(args.ToStyledString());
593 SetCommandResult("result", JsonReader::CreateBool(ret));
594 ILOG("MemoryRefresh finished.");
595 }
596
LoadDocumentCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)597 LoadDocumentCommand::LoadDocumentCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
598 : CommandLine(commandType, arg, socket)
599 {
600 }
601
IsSetArgValid() const602 bool LoadDocumentCommand::IsSetArgValid() const
603 {
604 if (args.IsNull() || !args.IsMember("url") || !args.IsMember("className") || !args.IsMember("previewParam") ||
605 !args["url"].IsString() || !args["className"].IsString() || !args["previewParam"].IsObject()) {
606 return false;
607 }
608 Json2::Value previewParam = args["previewParam"];
609 if (!previewParam["width"].IsInt() || !previewParam["height"].IsInt() || !previewParam["dpi"].IsInt() ||
610 !previewParam["locale"].IsString() || !previewParam["colorMode"].IsString() ||
611 !previewParam["orientation"].IsString() || !previewParam["deviceType"].IsString()) {
612 return false;
613 }
614 if (!IsIntValValid(previewParam) || !IsStrValVailid(previewParam)) {
615 return false;
616 }
617 return true;
618 }
619
IsIntValValid(const Json2::Value & previewParam) const620 bool LoadDocumentCommand::IsIntValValid(const Json2::Value& previewParam) const
621 {
622 int width = previewParam["width"].AsInt();
623 int height = previewParam["height"].AsInt();
624 int dpi = previewParam["dpi"].AsInt();
625 if (width < minLoadDocWidth || width > maxLoadDocWidth || height < minLoadDocWidth ||
626 height > maxLoadDocWidth || dpi < minDpi || dpi > maxDpi) {
627 return false;
628 }
629 return true;
630 }
631
IsStrValVailid(const Json2::Value & previewParam) const632 bool LoadDocumentCommand::IsStrValVailid(const Json2::Value& previewParam) const
633 {
634 std::string locale = previewParam["locale"].AsString();
635 bool isLiteDevice = JsApp::IsLiteDevice(CommandParser::GetInstance().GetDeviceType());
636 if (isLiteDevice) {
637 if (std::find(liteSupportedLanguages.begin(), liteSupportedLanguages.end(), locale) ==
638 liteSupportedLanguages.end()) {
639 return false;
640 }
641 } else {
642 if (std::find(richSupportedLanguages.begin(), richSupportedLanguages.end(), locale) ==
643 richSupportedLanguages.end()) {
644 return false;
645 }
646 }
647 if (previewParam["colorMode"].AsString() != "light" && previewParam["colorMode"].AsString() != "dark") {
648 return false;
649 }
650 if (previewParam["orientation"].AsString() != "portrait" &&
651 previewParam["orientation"].AsString() != "landscape") {
652 return false;
653 }
654 if (std::find(LoadDocDevs.begin(), LoadDocDevs.end(), previewParam["deviceType"].AsString()) ==
655 LoadDocDevs.end()) {
656 return false;
657 }
658 return true;
659 }
660
RunSet()661 void LoadDocumentCommand::RunSet()
662 {
663 VirtualScreenImpl::GetInstance().SetLoadDocFlag(VirtualScreen::LoadDocType::START);
664 ILOG("LoadDocumentCommand begin.");
665 std::string pageUrl = args["url"].AsString();
666 std::string className = args["className"].AsString();
667 VirtualScreenImpl::GetInstance().InitFlushEmptyTime();
668 JsAppImpl::GetInstance().LoadDocument(pageUrl, className, args["previewParam"]);
669 VirtualScreenImpl::GetInstance().SetLoadDocFlag(VirtualScreen::LoadDocType::FINISHED);
670 SetCommandResult("result", JsonReader::CreateBool(true));
671 ILOG("LoadDocumentCommand finished.");
672 }
673
ReloadRuntimePageCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)674 ReloadRuntimePageCommand::ReloadRuntimePageCommand(CommandType commandType,
675 const Json2::Value& arg,
676 const LocalSocket& socket)
677 : CommandLine(commandType, arg, socket)
678 {
679 }
680
IsSetArgValid() const681 bool ReloadRuntimePageCommand::IsSetArgValid() const
682 {
683 if (args.IsNull() || !args.IsMember("ReloadRuntimePage") || !args["ReloadRuntimePage"].IsString()) {
684 ELOG("Invalid number of arguments!");
685 return false;
686 }
687 return true;
688 }
689
RunSet()690 void ReloadRuntimePageCommand::RunSet()
691 {
692 std::string currentPage = args["ReloadRuntimePage"].AsString();
693 JsAppImpl::GetInstance().ReloadRuntimePage(currentPage);
694 SetCommandResult("result", JsonReader::CreateBool(true));
695 ILOG("ReloadRuntimePage finished, currentPage is: %s", args["ReloadRuntimePage"].AsString().c_str());
696 }
697
CurrentRouterCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)698 CurrentRouterCommand::CurrentRouterCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
699 : CommandLine(commandType, arg, socket)
700 {
701 }
702
RunGet()703 void CurrentRouterCommand::RunGet()
704 {
705 Json2::Value resultContent = JsonReader::CreateObject();
706 std::string currentRouter = VirtualScreenImpl::GetInstance().GetCurrentRouter();
707 resultContent.Add("CurrentRouter", currentRouter.c_str());
708 SetResultToManager("args", resultContent, "CurrentJsRouter");
709 ILOG("Get CurrentRouter run finished.");
710 }
711
LoadContentCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)712 LoadContentCommand::LoadContentCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
713 : CommandLine(commandType, arg, socket)
714 {
715 }
716
RunGet()717 void LoadContentCommand::RunGet()
718 {
719 Json2::Value resultContent = JsonReader::CreateObject();
720 std::string currentRouter = VirtualScreenImpl::GetInstance().GetAbilityCurrentRouter();
721 resultContent.Add("AbilityCurrentRouter", currentRouter.c_str());
722 SetResultToManager("args", resultContent, "AbilityCurrentJsRouter");
723 ILOG("Get AbilityCurrentRouter run finished.");
724 }
725
LanguageCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)726 LanguageCommand::LanguageCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
727 : CommandLine(commandType, arg, socket)
728 {
729 }
730
IsSetArgValid() const731 bool LanguageCommand::IsSetArgValid() const
732 {
733 if (args.IsNull() || !args.IsMember("Language") || !args["Language"].IsString()) {
734 ELOG("Invalid number of arguments!");
735 return false;
736 }
737
738 CommandParser& cmdParser = CommandParser::GetInstance();
739 std::string deviceType = cmdParser.GetDeviceType();
740 bool isLiteDevice = JsApp::IsLiteDevice(deviceType);
741 if (isLiteDevice) {
742 if (std::find(liteSupportedLanguages.begin(), liteSupportedLanguages.end(), args["Language"].AsString()) ==
743 liteSupportedLanguages.end()) {
744 ELOG("Language not support liteDevice : %s", args["Language"].AsString().c_str());
745 return false;
746 }
747 } else {
748 if (std::find(richSupportedLanguages.begin(), richSupportedLanguages.end(), args["Language"].AsString()) ==
749 richSupportedLanguages.end()) {
750 ELOG("Language not support richDevice : %s", args["Language"].AsString().c_str());
751 return false;
752 }
753 }
754 return true;
755 }
756
RunGet()757 void LanguageCommand::RunGet()
758 {
759 std::string language = SharedData<std::string>::GetData(SharedDataType::LANGUAGE);
760 Json2::Value resultContent = JsonReader::CreateObject();
761 resultContent.Add("Language", language.c_str());
762 SetCommandResult("result", resultContent);
763 ILOG("Get language run finished.");
764 }
765
RunSet()766 void LanguageCommand::RunSet()
767 {
768 std::string language(args["Language"].AsString());
769 SharedData<std::string>::SetData(SharedDataType::LANGUAGE, language);
770 SetCommandResult("result", JsonReader::CreateBool(true));
771 ILOG("Set language run finished, language is: %s", language.c_str());
772 }
773
SupportedLanguagesCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)774 SupportedLanguagesCommand::SupportedLanguagesCommand(CommandType commandType,
775 const Json2::Value& arg,
776 const LocalSocket& socket)
777 : CommandLine(commandType, arg, socket)
778 {
779 }
780
RunGet()781 void SupportedLanguagesCommand::RunGet()
782 {
783 Json2::Value resultContent = JsonReader::CreateObject();
784 Json2::Value languageList = JsonReader::CreateArray();
785 std::string deviceType = CommandParser::GetInstance().GetDeviceType();
786 bool isLiteDevice = JsApp::IsLiteDevice(deviceType);
787 if (!deviceType.empty() && !isLiteDevice) {
788 for (auto iter = richSupportedLanguages.begin(); iter != richSupportedLanguages.end(); iter++) {
789 languageList.Add((*iter).c_str());
790 }
791 } else {
792 for (auto iter = liteSupportedLanguages.begin(); iter != liteSupportedLanguages.end(); iter++) {
793 languageList.Add((*iter).c_str());
794 }
795 }
796 resultContent.Add("SupportedLanguages", languageList);
797 SetCommandResult("result", resultContent);
798 ILOG("Get supportedLanguages run finished.");
799 }
800
LocationCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)801 LocationCommand::LocationCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
802 : CommandLine(commandType, arg, socket)
803 {
804 }
805
IsSetArgValid() const806 bool LocationCommand::IsSetArgValid() const
807 {
808 if (args.IsNull() || !args.IsMember("latitude") || !args.IsMember("longitude")) {
809 ELOG("Invalid number of arguments!");
810 return false;
811 }
812 std::string latitude(args["latitude"].AsString());
813 std::string longitude(args["longitude"].AsString());
814 std::regex isDob("^([\\-]*[0-9]{1,}[\\.][0-9]*)$");
815 if (!regex_match(latitude, isDob) || !regex_match(longitude, isDob)) {
816 ELOG("Invalid arguments!");
817 return false;
818 }
819
820 if (!SharedData<double>::IsValid(SharedDataType::LATITUDE, atof(latitude.data()))) {
821 ELOG("LocationCommand invalid latitude value: %f", atof(latitude.data()));
822 return false;
823 }
824
825 if (!SharedData<double>::IsValid(SharedDataType::LONGITUDE, atof(longitude.data()))) {
826 ELOG("LocationCommand invalid longitude value: %f", atof(longitude.data()));
827 return false;
828 }
829 return true;
830 }
831
RunGet()832 void LocationCommand::RunGet()
833 {
834 double longitude = SharedData<double>::GetData(SharedDataType::LONGITUDE);
835 double latitude = SharedData<double>::GetData(SharedDataType::LATITUDE);
836 Json2::Value resultContent = JsonReader::CreateObject();
837 resultContent.Add("latitude", latitude);
838 resultContent.Add("longitude", longitude);
839 SetCommandResult("result", resultContent);
840 ILOG("Get location run finished");
841 }
842
RunSet()843 void LocationCommand::RunSet()
844 {
845 std::string latitude(args["latitude"].AsString());
846 std::string longitude(args["longitude"].AsString());
847 SharedData<double>::SetData(SharedDataType::LONGITUDE, atof(longitude.data()));
848 SharedData<double>::SetData(SharedDataType::LATITUDE, atof(latitude.data()));
849 Json2::Value resultContent = JsonReader::CreateBool(true);
850 SetCommandResult("result", resultContent);
851 ILOG("Set location run finished, latitude: %s,longitude: %s", latitude.c_str(), longitude.c_str());
852 }
853
DistributedCommunicationsCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)854 DistributedCommunicationsCommand::DistributedCommunicationsCommand(CommandType commandType,
855 const Json2::Value& arg,
856 const LocalSocket& socket)
857 : CommandLine(commandType, arg, socket)
858 {
859 }
860
RunAction()861 void DistributedCommunicationsCommand::RunAction()
862 {
863 MessageInfo info;
864 info.deviceID = args["DeviceId"].AsString();
865 info.bundleName = args["bundleName"].AsString();
866 info.abilityName = args["abilityName"].AsString();
867 info.message = args["message"].AsString();
868 VirtualMessageImpl::GetInstance().SendVirtualMessage(info);
869 Json2::Value resultContent = JsonReader::CreateBool(true);
870 SetCommandResult("result", resultContent);
871 ILOG("Send distributedCommunications run finished");
872 }
873
IsActionArgValid() const874 bool DistributedCommunicationsCommand::IsActionArgValid() const
875 {
876 if (args.IsNull() || !args.IsMember("DeviceId") || !args.IsMember("bundleName") || !args.IsMember("abilityName") ||
877 !args.IsMember("message")) {
878 ELOG("Invalid number of arguments!");
879 return false;
880 }
881 if (args["DeviceId"].AsString().empty() || args["bundleName"].AsString().empty() ||
882 args["abilityName"].AsString().empty() || args["message"].AsString().empty()) {
883 ELOG("Invalid arguments!");
884 return false;
885 }
886 return true;
887 }
888
StringToCharVector(std::string str) const889 std::vector<char> DistributedCommunicationsCommand::StringToCharVector(std::string str) const
890 {
891 std::vector<char> vec(str.begin(), str.end());
892 vec.push_back('\0');
893 return vec;
894 }
895
KeepScreenOnStateCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)896 KeepScreenOnStateCommand::KeepScreenOnStateCommand(CommandType commandType,
897 const Json2::Value& arg,
898 const LocalSocket& socket)
899 : CommandLine(commandType, arg, socket)
900 {
901 }
902
RunGet()903 void KeepScreenOnStateCommand::RunGet()
904 {
905 Json2::Value result = JsonReader::CreateObject();
906 result.Add("KeepScreenOnState", SharedData<bool>::GetData(SharedDataType::KEEP_SCREEN_ON));
907 SetCommandResult("result", result);
908 ILOG("Get keepScreenOnState run finished");
909 }
910
RunSet()911 void KeepScreenOnStateCommand::RunSet()
912 {
913 SharedData<bool>::SetData(SharedDataType::KEEP_SCREEN_ON, args["KeepScreenOnState"].AsBool());
914 SetCommandResult("result", JsonReader::CreateBool(true));
915 ILOG("Set keepScreenOnState run finished, the value is: %s",
916 args["KeepScreenOnState"].AsBool() ? "true" : "false");
917 }
918
IsSetArgValid() const919 bool KeepScreenOnStateCommand::IsSetArgValid() const
920 {
921 if (args.IsNull() || !args.IsMember("KeepScreenOnState")) {
922 ELOG("Invalid number of arguments!");
923 return false;
924 }
925 if (!args["KeepScreenOnState"].IsBool()) {
926 ELOG("arg KeepScreenOnState id not bool");
927 return false;
928 }
929 return true;
930 }
931
WearingStateCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)932 WearingStateCommand::WearingStateCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
933 : CommandLine(commandType, arg, socket)
934 {
935 }
936
RunGet()937 void WearingStateCommand::RunGet()
938 {
939 Json2::Value result = JsonReader::CreateObject();
940 result.Add("WearingState", SharedData<bool>::GetData(SharedDataType::WEARING_STATE));
941 SetCommandResult("result", result);
942 ILOG("Get wearingState run finished");
943 }
944
RunSet()945 void WearingStateCommand::RunSet()
946 {
947 SharedData<bool>::SetData(SharedDataType::WEARING_STATE, args["WearingState"].AsBool());
948 SetCommandResult("result", JsonReader::CreateBool(true));
949 ILOG("Set wearingState run finished, the value is: %s", args["WearingState"].AsBool() ? "true" : "false");
950 }
951
IsSetArgValid() const952 bool WearingStateCommand::IsSetArgValid() const
953 {
954 if (args.IsNull() || !args.IsMember("WearingState")) {
955 ELOG("Invalid number of arguments!");
956 return false;
957 }
958 if (!args["WearingState"].IsBool()) {
959 ILOG("arg WearingState is not bool");
960 return false;
961 }
962 return true;
963 }
964
BrightnessModeCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)965 BrightnessModeCommand::BrightnessModeCommand(CommandType commandType, const Json2::Value& arg,
966 const LocalSocket& socket) : CommandLine(commandType, arg, socket)
967 {
968 }
969
RunGet()970 void BrightnessModeCommand::RunGet()
971 {
972 Json2::Value result = JsonReader::CreateObject();
973 result.Add("BrightnessMode", SharedData<uint8_t>::GetData(SharedDataType::BRIGHTNESS_MODE));
974 SetCommandResult("result", result);
975 ILOG("Get brightnessMode run finished");
976 }
977
RunSet()978 void BrightnessModeCommand::RunSet()
979 {
980 SharedData<uint8_t>::SetData(SharedDataType::BRIGHTNESS_MODE,
981 static_cast<uint8_t>(args["BrightnessMode"].AsInt()));
982 SetCommandResult("result", JsonReader::CreateBool(true));
983 ILOG("Set brightnessMode run finished, the value is: %d", args["BrightnessMode"].AsInt());
984 }
985
IsSetArgValid() const986 bool BrightnessModeCommand::IsSetArgValid() const
987 {
988 if (args.IsNull() || !args.IsMember("BrightnessMode")) {
989 ELOG("Invalid number of arguments!");
990 return false;
991 }
992 if (!args["BrightnessMode"].IsInt()) {
993 ELOG("BrightnessMode is not int");
994 return false;
995 }
996 uint8_t temp = static_cast<uint8_t>(args["BrightnessMode"].AsInt());
997 if (!SharedData<uint8_t>::IsValid(SharedDataType::BRIGHTNESS_MODE, temp)) {
998 ELOG("BrightnessModeCommand invalid value: %d", temp);
999 return false;
1000 }
1001 return true;
1002 }
1003
ChargeModeCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1004 ChargeModeCommand::ChargeModeCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1005 : CommandLine(commandType, arg, socket)
1006 {
1007 }
1008
RunGet()1009 void ChargeModeCommand::RunGet()
1010 {
1011 Json2::Value result = JsonReader::CreateObject();
1012 result.Add("ChargeMode", SharedData<uint8_t>::GetData(SharedDataType::BATTERY_STATUS));
1013 SetCommandResult("result", result);
1014 ILOG("Get chargeMode run finished");
1015 }
1016
RunSet()1017 void ChargeModeCommand::RunSet()
1018 {
1019 SharedData<uint8_t>::SetData(SharedDataType::BATTERY_STATUS,
1020 static_cast<uint8_t>(args["ChargeMode"].AsInt()));
1021 SetCommandResult("result", JsonReader::CreateBool(true));
1022 ILOG("Set chargeMode run finished, the value is: %d", args["ChargeMode"].AsInt());
1023 }
1024
IsSetArgValid() const1025 bool ChargeModeCommand::IsSetArgValid() const
1026 {
1027 if (args.IsNull() || !args.IsMember("ChargeMode")) {
1028 ELOG("Invalid number of arguments!");
1029 return false;
1030 }
1031 if (!args["ChargeMode"].IsInt()) {
1032 ELOG("ChargeMode is not int");
1033 return false;
1034 }
1035 uint8_t temp = static_cast<uint8_t>(args["ChargeMode"].AsInt());
1036 if (!SharedData<uint8_t>::IsValid(SharedDataType::BATTERY_STATUS, temp)) {
1037 ELOG("ChargeModeCommand invalid value: %d", temp);
1038 return false;
1039 }
1040 return true;
1041 }
1042
BrightnessCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1043 BrightnessCommand::BrightnessCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1044 : CommandLine(commandType, arg, socket)
1045 {
1046 }
1047
RunGet()1048 void BrightnessCommand::RunGet()
1049 {
1050 Json2::Value result = JsonReader::CreateObject();
1051 result.Add("Brightness", SharedData<uint8_t>::GetData(SharedDataType::BRIGHTNESS_VALUE));
1052 SetCommandResult("result", result);
1053 ILOG("Get brightness run finished");
1054 }
1055
RunSet()1056 void BrightnessCommand::RunSet()
1057 {
1058 SharedData<uint8_t>::SetData(SharedDataType::BRIGHTNESS_VALUE,
1059 static_cast<uint8_t>(args["Brightness"].AsInt()));
1060 Json2::Value result = JsonReader::CreateBool(true);
1061 SetCommandResult("result", result);
1062 ILOG("Set brightness run finished, the value is: %d", args["Brightness"].AsInt());
1063 }
1064
IsSetArgValid() const1065 bool BrightnessCommand::IsSetArgValid() const
1066 {
1067 if (args.IsNull() || !args.IsMember("Brightness")) {
1068 ELOG("Invalid number of arguments!");
1069 return false;
1070 }
1071 if (!args["Brightness"].IsInt()) {
1072 ELOG("Brightness is not int");
1073 return false;
1074 }
1075 uint8_t temp = static_cast<uint8_t>(args["Brightness"].AsInt());
1076 if (!SharedData<uint8_t>::IsValid(SharedDataType::BRIGHTNESS_VALUE, temp)) {
1077 ELOG("BrightnessCommand invalid value: ", temp);
1078 return false;
1079 }
1080 return true;
1081 }
1082
HeartRateCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1083 HeartRateCommand::HeartRateCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1084 : CommandLine(commandType, arg, socket)
1085 {
1086 }
1087
RunGet()1088 void HeartRateCommand::RunGet()
1089 {
1090 Json2::Value result = JsonReader::CreateObject();
1091 result.Add("HeartRate", SharedData<uint8_t>::GetData(SharedDataType::HEARTBEAT_VALUE));
1092 SetCommandResult("result", result);
1093 ILOG("Get heartRate run finished");
1094 }
1095
RunSet()1096 void HeartRateCommand::RunSet()
1097 {
1098 SharedData<uint8_t>::SetData(SharedDataType::HEARTBEAT_VALUE,
1099 static_cast<uint8_t>(args["HeartRate"].AsInt()));
1100 SetCommandResult("result", JsonReader::CreateBool(true));
1101 ILOG("Set heartRate run finished, the value is: %d", args["HeartRate"].AsInt());
1102 }
1103
IsSetArgValid() const1104 bool HeartRateCommand::IsSetArgValid() const
1105 {
1106 if (args.IsNull() || !args.IsMember("HeartRate")) {
1107 ELOG("Invalid number of arguments!");
1108 return false;
1109 }
1110 if (!args["HeartRate"].IsInt()) {
1111 ELOG("HeartRate is not int");
1112 return false;
1113 }
1114 if (args["HeartRate"].AsInt() > UINT8_MAX) {
1115 ELOG("Invalid arguments!");
1116 return false;
1117 }
1118 uint8_t temp = static_cast<uint8_t>(args["HeartRate"].AsInt());
1119 if (!SharedData<uint8_t>::IsValid(SharedDataType::HEARTBEAT_VALUE, temp)) {
1120 ELOG("HeartRateCommand invalid value: %d", temp);
1121 return false;
1122 }
1123 return true;
1124 }
1125
StepCountCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1126 StepCountCommand::StepCountCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1127 : CommandLine(commandType, arg, socket)
1128 {
1129 }
1130
RunGet()1131 void StepCountCommand::RunGet()
1132 {
1133 Json2::Value result = JsonReader::CreateObject();
1134 result.Add("StepCount", SharedData<uint32_t>::GetData(SharedDataType::SUMSTEP_VALUE));
1135 SetCommandResult("result", result);
1136 ILOG("Get stepCount run finished");
1137 }
1138
RunSet()1139 void StepCountCommand::RunSet()
1140 {
1141 SharedData<uint32_t>::SetData(SharedDataType::SUMSTEP_VALUE,
1142 static_cast<uint32_t>(args["StepCount"].AsInt()));
1143 SetCommandResult("result", JsonReader::CreateBool(true));
1144 ILOG("Set stepCount run finished, the value is: %d", args["StepCount"].AsInt());
1145 }
1146
IsSetArgValid() const1147 bool StepCountCommand::IsSetArgValid() const
1148 {
1149 if (args.IsNull() || !args.IsMember("StepCount")) {
1150 ELOG("Invalid number of arguments!");
1151 return false;
1152 }
1153 if (!args["StepCount"].IsInt()) {
1154 ELOG("StepCount is not int");
1155 return false;
1156 }
1157
1158 uint32_t temp = args["StepCount"].AsUInt();
1159 if (!SharedData<uint32_t>::IsValid(SharedDataType::SUMSTEP_VALUE, temp)) {
1160 ELOG("StepCountCommand invalid value: %d", temp);
1161 return false;
1162 }
1163 return true;
1164 }
1165
InspectorJSONTree(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1166 InspectorJSONTree::InspectorJSONTree(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1167 : CommandLine(commandType, arg, socket)
1168 {
1169 }
1170
RunAction()1171 void InspectorJSONTree::RunAction()
1172 {
1173 ILOG("GetJsonTree run!");
1174 std::string str = JsAppImpl::GetInstance().GetJSONTree();
1175 if (str == "null") {
1176 str = "{\"children\":\"empty json tree\"}";
1177 }
1178 SetCommandResult("result", JsonReader::CreateString(str));
1179 ILOG("SendJsonTree end!");
1180 }
1181
InspectorDefault(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1182 InspectorDefault::InspectorDefault(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1183 : CommandLine(commandType, arg, socket)
1184 {
1185 }
1186
RunAction()1187 void InspectorDefault::RunAction()
1188 {
1189 ILOG("GetDefaultJsonTree run!");
1190 std::string str = JsAppImpl::GetInstance().GetDefaultJSONTree();
1191 SetCommandResult("result", JsonReader::CreateString(str));
1192 ILOG("SendDefaultJsonTree end!");
1193 }
1194
ExitCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1195 ExitCommand::ExitCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1196 : CommandLine(commandType, arg, socket)
1197 {
1198 }
1199
RunAction()1200 void ExitCommand::RunAction()
1201 {
1202 ILOG("ExitCommand run.");
1203 SetCommandResult("result", JsonReader::CreateBool(true));
1204 SendResult();
1205 Interrupter::Interrupt();
1206 ILOG("Ready to exit");
1207 }
1208
DeviceTypeCommand(CommandLine::CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1209 DeviceTypeCommand::DeviceTypeCommand(CommandLine::CommandType commandType,
1210 const Json2::Value& arg,
1211 const LocalSocket& socket)
1212 : CommandLine(commandType, arg, socket)
1213 {
1214 }
1215
RunSet()1216 void DeviceTypeCommand::RunSet() {}
1217
ResolutionCommand(CommandLine::CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1218 ResolutionCommand::ResolutionCommand(CommandLine::CommandType commandType,
1219 const Json2::Value& arg,
1220 const LocalSocket& socket)
1221 : CommandLine(commandType, arg, socket)
1222 {
1223 }
1224
RunSet()1225 void ResolutionCommand::RunSet() {}
1226
BackClickedCommand(CommandLine::CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1227 BackClickedCommand::BackClickedCommand(CommandLine::CommandType commandType,
1228 const Json2::Value& arg,
1229 const LocalSocket& socket)
1230 : CommandLine(commandType, arg, socket)
1231 {
1232 }
1233
RunAction()1234 void BackClickedCommand::RunAction()
1235 {
1236 MouseInputImpl::GetInstance().DispatchOsBackEvent();
1237 ILOG("BackClickCommand run");
1238 SetCommandResult("result", JsonReader::CreateBool(true));
1239 ILOG("BackClickCommand end");
1240 }
1241
RestartCommand(CommandLine::CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1242 RestartCommand::RestartCommand(CommandLine::CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1243 : CommandLine(commandType, arg, socket)
1244 {
1245 }
1246
RunAction()1247 void RestartCommand::RunAction()
1248 {
1249 ILOG("RestartCommand start");
1250 JsAppImpl::GetInstance().Restart();
1251 SetCommandResult("result", JsonReader::CreateBool(true));
1252 ILOG("RestartCommand end");
1253 }
1254
FastPreviewMsgCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1255 FastPreviewMsgCommand::FastPreviewMsgCommand(CommandType commandType, const Json2::Value& arg,
1256 const LocalSocket& socket) : CommandLine(commandType, arg, socket)
1257 {
1258 }
1259
RunGet()1260 void FastPreviewMsgCommand::RunGet()
1261 {
1262 Json2::Value resultContent = JsonReader::CreateObject();
1263 std::string fastPreviewMsg = VirtualScreenImpl::GetInstance().GetFastPreviewMsg();
1264 resultContent.Add("FastPreviewMsg", fastPreviewMsg.c_str());
1265 SetResultToManager("args", resultContent, "MemoryRefresh");
1266 ILOG("Get FastPreviewMsgCommand run finished.");
1267 }
1268
DropFrameCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1269 DropFrameCommand::DropFrameCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1270 : CommandLine(commandType, arg, socket)
1271 {
1272 }
1273
IsSetArgValid() const1274 bool DropFrameCommand::IsSetArgValid() const
1275 {
1276 if (args.IsNull() || !args.IsMember("frequency") || !args["frequency"].IsInt()) {
1277 ELOG("Invalid DropFrame of arguments!");
1278 return false;
1279 }
1280 if (args["frequency"].AsInt() < 0) {
1281 ELOG("DropFrame param frequency must greater than or equal to 0");
1282 return false;
1283 }
1284 return true;
1285 }
1286
RunSet()1287 void DropFrameCommand::RunSet()
1288 {
1289 ILOG("Set DropFrame frequency start.");
1290 int frequency = args["frequency"].AsInt();
1291 VirtualScreenImpl::GetInstance().SetDropFrameFrequency(frequency);
1292 SetCommandResult("result", JsonReader::CreateBool(true));
1293 ILOG("Set DropFrame frequency: %dms.", frequency);
1294 }
1295
IsActionArgValid() const1296 bool KeyPressCommand::IsActionArgValid() const
1297 {
1298 if (args.IsNull() || !args.IsMember("isInputMethod") || !args["isInputMethod"].IsBool()) {
1299 ELOG("Param isInputMethod's value is invalid.");
1300 return false;
1301 }
1302 bool isInputMethod = args["isInputMethod"].AsBool();
1303 if (isInputMethod) {
1304 return IsImeArgsValid();
1305 } else {
1306 return IsKeyArgsValid();
1307 }
1308 }
1309
IsImeArgsValid() const1310 bool KeyPressCommand::IsImeArgsValid() const
1311 {
1312 if (!args.IsMember("codePoint") || !args["codePoint"].IsInt()) {
1313 ELOG("Param codePoint's value is invalid.");
1314 return false;
1315 }
1316 return true;
1317 }
1318
IsKeyArgsValid() const1319 bool KeyPressCommand::IsKeyArgsValid() const
1320 {
1321 if (!args.IsMember("keyCode") || !args["keyCode"].IsInt() || !args["keyAction"].IsInt() ||
1322 !args.IsMember("keyAction") || !args["keyAction"].IsInt() ||
1323 !args.IsMember("pressedCodes") || !args["pressedCodes"].IsArray() ||
1324 args["pressedCodes"].GetArraySize() < 1 || (args.IsMember("keyString") && !args["keyString"].IsString())) {
1325 ELOG("Param keyEvent's value is invalid.");
1326 return false;
1327 }
1328 if (!args.IsMember("keyString")) {
1329 ILOG("Param keyString is lost, it will be empty string.");
1330 }
1331 if (args["keyAction"].AsInt() < minActionVal || args["keyAction"].AsInt() > maxActionVal) {
1332 ELOG("Param keyAction's value is invalid,value range %d-%d.", minActionVal, maxActionVal);
1333 return false;
1334 }
1335 int keyCode = args["keyCode"].AsInt();
1336 if (keyCode > maxKeyVal || keyCode < minKeyVal) {
1337 ELOG("Param pressedCode value is invalid,value range %d-%d.", minKeyVal, maxKeyVal);
1338 return false;
1339 }
1340 Json2::Value arrayNum = args["pressedCodes"];
1341 for (unsigned int i = 0; i < arrayNum.GetArraySize(); i++) {
1342 if (!arrayNum.GetArrayItem(i).IsInt()) {
1343 ELOG("Param pressedCodes's value is invalid.");
1344 return false;
1345 }
1346 int pressedCode = arrayNum.GetArrayItem(i).AsInt();
1347 if (pressedCode > maxKeyVal || pressedCode < minKeyVal) {
1348 ELOG("Param pressedCode value is invalid,value range %d-%d.", minKeyVal, maxKeyVal);
1349 return false;
1350 }
1351 }
1352 return true;
1353 }
1354
KeyPressCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1355 KeyPressCommand::KeyPressCommand(CommandType commandType, const Json2::Value& arg,
1356 const LocalSocket& socket)
1357 : CommandLine(commandType, arg, socket)
1358 {
1359 }
1360
RunAction()1361 void KeyPressCommand::RunAction()
1362 {
1363 if (CommandParser::GetInstance().GetScreenMode() == CommandParser::ScreenMode::STATIC) {
1364 return;
1365 }
1366 bool isInputMethod = args["isInputMethod"].AsBool();
1367 if (isInputMethod) {
1368 VirtualScreen::inputMethodCountPerMinute++;
1369 unsigned int codePoint = args["codePoint"].AsInt();
1370 KeyInputImpl::GetInstance().SetCodePoint(codePoint);
1371 KeyInputImpl::GetInstance().DispatchOsInputMethodEvent();
1372 } else {
1373 VirtualScreen::inputKeyCountPerMinute++;
1374 int32_t keyCode = args["keyCode"].AsInt();
1375 int32_t keyAction = args["keyAction"].AsInt();
1376 Json2::Value pressedCodes = args["pressedCodes"];
1377 std::vector<int32_t> pressedCodesVec;
1378 for (unsigned int i = 0; i < pressedCodes.GetArraySize(); i++) {
1379 pressedCodesVec.push_back(pressedCodes.GetArrayItem(i).AsInt());
1380 }
1381 std::string keyString = "";
1382 if (args.IsMember("keyString") && args["keyString"].IsString()) {
1383 keyString = args["keyString"].AsString();
1384 }
1385 KeyInputImpl::GetInstance().SetKeyEvent(keyCode, keyAction, pressedCodesVec, keyString);
1386 KeyInputImpl::GetInstance().DispatchOsKeyEvent();
1387 }
1388 SetCommandResult("result", JsonReader::CreateBool(true));
1389 ILOG("KeyPressCommand run finished.");
1390 }
1391
IsActionArgValid() const1392 bool PointEventCommand::IsActionArgValid() const
1393 {
1394 return IsArgsExist() && IsArgsValid();
1395 }
1396
IsArgsExist() const1397 bool PointEventCommand::IsArgsExist() const
1398 {
1399 if (args.IsNull() || !args.IsMember("x") || !args.IsMember("y") ||
1400 !args["x"].IsInt() || !args["y"].IsInt()) {
1401 return false;
1402 }
1403 if (!args.IsMember("button") || !args.IsMember("action") ||
1404 !args["button"].IsInt() || !args["action"].IsInt()) {
1405 return false;
1406 }
1407 if (!args.IsMember("sourceType") || !args.IsMember("sourceTool") ||
1408 !args["sourceType"].IsInt() || !args["sourceTool"].IsInt()) {
1409 return false;
1410 }
1411 if (!args.IsMember("axisValues") || !args["axisValues"].IsArray()) {
1412 return false;
1413 }
1414 return true;
1415 }
1416
IsArgsValid() const1417 bool PointEventCommand::IsArgsValid() const
1418 {
1419 int32_t pointX = args["x"].AsInt();
1420 int32_t pointY = args["y"].AsInt();
1421 int32_t button = args["button"].AsInt();
1422 int32_t action = args["action"].AsInt();
1423 int32_t sourceType = args["sourceType"].AsInt();
1424 int32_t sourceTool = args["sourceTool"].AsInt();
1425 if (pointX < 0 || pointX > VirtualScreenImpl::GetInstance().GetCurrentWidth()) {
1426 ELOG("X coordinate range %d ~ %d", 0, VirtualScreenImpl::GetInstance().GetCurrentWidth());
1427 return false;
1428 }
1429 if (pointY < 0 || pointY > VirtualScreenImpl::GetInstance().GetCurrentHeight()) {
1430 ELOG("Y coordinate range %d ~ %d", 0, VirtualScreenImpl::GetInstance().GetCurrentHeight());
1431 return false;
1432 }
1433 if (button < -1 || action < 0 || sourceType < 0 || sourceTool < 0) {
1434 ELOG("action,sourceType,sourceTool must >= 0, button must >= -1");
1435 return false;
1436 }
1437 Json2::Value axisArrayNum = args["axisValues"];
1438 for (unsigned int i = 0; i < axisArrayNum.GetArraySize(); i++) {
1439 if (!axisArrayNum.GetArrayItem(i).IsDouble()) {
1440 ELOG("Param axisValues's value is invalid.");
1441 return false;
1442 }
1443 }
1444 return true;
1445 }
1446
PointEventCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1447 PointEventCommand::PointEventCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1448 : CommandLine(commandType, arg, socket)
1449 {
1450 }
1451
RunAction()1452 void PointEventCommand::RunAction()
1453 {
1454 int type = 9;
1455 EventParams param;
1456 if (args.IsMember("pressedButtons") && args["pressedButtons"].IsArray()) {
1457 Json2::Value pressedCodes = args["pressedButtons"];
1458 for (unsigned int i = 0; i < pressedCodes.GetArraySize(); i++) {
1459 Json2::Value val = pressedCodes.GetArrayItem(i);
1460 if (!val.IsInt() || val.AsInt() < -1) {
1461 continue;
1462 }
1463 param.pressedBtnsVec.insert(val.AsInt());
1464 }
1465 }
1466 std::vector<double> axisVec; // 13 is array size
1467 Json2::Value axisCodes = args["axisValues"];
1468 for (unsigned int i = 0; i < axisCodes.GetArraySize(); i++) {
1469 param.axisVec.push_back(axisCodes.GetArrayItem(i).AsDouble());
1470 }
1471 param.x = args["x"].AsDouble();
1472 param.y = args["y"].AsDouble();
1473 param.type = type;
1474 param.button = args["button"].AsInt();
1475 param.action = args["action"].AsInt();
1476 param.sourceType = args["sourceType"].AsInt();
1477 param.sourceTool = args["sourceTool"].AsInt();
1478 param.name = "PointEvent";
1479 SetEventParams(param);
1480 SetCommandResult("result", JsonReader::CreateBool(true));
1481 }
1482
FoldStatusCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1483 FoldStatusCommand::FoldStatusCommand(CommandType commandType, const Json2::Value& arg, const LocalSocket& socket)
1484 : CommandLine(commandType, arg, socket)
1485 {
1486 }
1487
IsSetArgValid() const1488 bool FoldStatusCommand::IsSetArgValid() const
1489 {
1490 if (args.IsNull() || !args.IsMember("FoldStatus") || !args["FoldStatus"].IsString()) {
1491 ELOG("Invalid FoldStatus of arguments!");
1492 return false;
1493 }
1494 if (!args.IsMember("width") || !args["width"].IsInt() ||
1495 !args.IsMember("height") || !args["height"].IsInt()) {
1496 ELOG("Invalid width and height of arguments!");
1497 return false;
1498 }
1499 if (args["width"].AsInt() < minWidth || args["width"].AsInt() > maxWidth ||
1500 args["height"].AsInt() < minWidth || args["height"].AsInt() > maxWidth) {
1501 ELOG("width or height is out of range %d-%d", minWidth, maxWidth);
1502 return false;
1503 }
1504 if (args["FoldStatus"].AsString() == "fold" || args["FoldStatus"].AsString() == "unfold" ||
1505 args["FoldStatus"].AsString() == "unknown" || args["FoldStatus"].AsString() == "half_fold") {
1506 return true;
1507 }
1508 ELOG("FoldStatus param must be \"fold\" or \"unfold\" or \"unknown\" or \"half_fold\"");
1509 return false;
1510 }
1511
RunSet()1512 void FoldStatusCommand::RunSet()
1513 {
1514 std::string commandStatus = args["FoldStatus"].AsString();
1515 int32_t width = args["width"].AsInt();
1516 int32_t height = args["height"].AsInt();
1517 std::string currentStatus = VirtualScreenImpl::GetInstance().GetFoldStatus();
1518 if (commandStatus != currentStatus) {
1519 JsAppImpl::GetInstance().FoldStatusChanged(commandStatus, width, height);
1520 }
1521 SetCommandResult("result", JsonReader::CreateBool(true));
1522 ILOG("Set FoldStatus run finished, FoldStatus is: %s", args["FoldStatus"].AsString().c_str());
1523 }
1524
AvoidAreaCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1525 AvoidAreaCommand::AvoidAreaCommand(CommandType commandType, const Json2::Value& arg,
1526 const LocalSocket& socket) : CommandLine(commandType, arg, socket)
1527 {
1528 }
1529
IsSetArgValid() const1530 bool AvoidAreaCommand::IsSetArgValid() const
1531 {
1532 if (args.IsNull() || !args.IsMember("topRect") || !args.IsMember("bottomRect") ||
1533 !args.IsMember("leftRect") || !args.IsMember("rightRect")) {
1534 ELOG("AvoidAreaCommand missing arguments!");
1535 return false;
1536 }
1537 if (!args["topRect"].IsObject() || !args["bottomRect"].IsObject() || !args["leftRect"].IsObject()
1538 || !args["rightRect"].IsObject()) {
1539 ELOG("Invalid values of arguments!");
1540 return false;
1541 }
1542 Json2::Value topRect = args.GetValue("topRect");
1543 Json2::Value bottomRect = args.GetValue("bottomRect");
1544 Json2::Value leftRect = args.GetValue("leftRect");
1545 Json2::Value rightRect = args.GetValue("rightRect");
1546 if (!IsObjectValid(topRect) || !IsObjectValid(bottomRect) ||
1547 !IsObjectValid(leftRect) || !IsObjectValid(rightRect)) {
1548 ELOG("Invalid values of arguments!");
1549 return false;
1550 }
1551 return true;
1552 }
1553
IsObjectValid(const Json2::Value & val) const1554 bool AvoidAreaCommand::IsObjectValid(const Json2::Value& val) const
1555 {
1556 if (val.IsNull() || !val.IsMember("posX") || !val["posY"].IsInt() ||
1557 !val.IsMember("width") || !val.IsMember("height")) {
1558 ELOG("AvoidAreaCommand missing arguments!");
1559 return false;
1560 }
1561 if (!val["posX"].IsInt() || !val["posY"].IsInt() || !val["width"].IsUInt()
1562 || !val["height"].IsUInt()) {
1563 ELOG("Invalid values of arguments!");
1564 return false;
1565 }
1566 if (val["posX"].AsInt() < 0 || val["posY"].AsInt() < 0 ||
1567 val["width"].AsUInt() < 0 || val["height"].AsUInt() < 0) {
1568 ELOG("Invalid values of arguments!");
1569 return false;
1570 }
1571 return true;
1572 }
1573
RunSet()1574 void AvoidAreaCommand::RunSet()
1575 {
1576 Json2::Value topRectObj = args.GetValue("topRect");
1577 AvoidRect topRect = AvoidRect(topRectObj["posX"].AsInt(), topRectObj["posY"].AsInt(),
1578 topRectObj["width"].AsUInt(), topRectObj["height"].AsUInt());
1579 Json2::Value bottomRectObj = args.GetValue("bottomRect");
1580 AvoidRect bottomRect = AvoidRect(bottomRectObj["posX"].AsInt(), bottomRectObj["posY"].AsInt(),
1581 bottomRectObj["width"].AsUInt(), bottomRectObj["height"].AsUInt());
1582 Json2::Value leftRectObj = args.GetValue("leftRect");
1583 AvoidRect leftRect = AvoidRect(leftRectObj["posX"].AsInt(), leftRectObj["posY"].AsInt(),
1584 leftRectObj["width"].AsUInt(), leftRectObj["height"].AsUInt());
1585 Json2::Value rightRectObj = args.GetValue("rightRect");
1586 AvoidRect rightRect = AvoidRect(rightRectObj["posX"].AsInt(), rightRectObj["posY"].AsInt(),
1587 rightRectObj["width"].AsUInt(), rightRectObj["height"].AsUInt());
1588 JsAppImpl::GetInstance().SetAvoidArea(AvoidAreas(topRect, leftRect, rightRect, bottomRect));
1589 SetCommandResult("result", JsonReader::CreateBool(true));
1590 ILOG("Set AvoidArea run finished");
1591 }
1592
AvoidAreaChangedCommand(CommandType commandType,const Json2::Value & arg,const LocalSocket & socket)1593 AvoidAreaChangedCommand::AvoidAreaChangedCommand(CommandType commandType, const Json2::Value& arg,
1594 const LocalSocket& socket) : CommandLine(commandType, arg, socket)
1595 {
1596 }
1597
RunGet()1598 void AvoidAreaChangedCommand::RunGet()
1599 {
1600 SetResultToManager("args", args, "AvoidAreaChanged");
1601 ILOG("Get AvoidAreaChangedCommand run finished.");
1602 }