| 108 | } |
| 109 | |
| 110 | void ServiceMsgServer::ParseMessage(const std::shared_ptr<SessionWrapper>& sw, std::string_view data) { |
| 111 | tc::ServiceMessage msg; |
| 112 | try { |
| 113 | msg.ParseFromString(std::string(data.data(), data.size())); |
| 114 | auto type = msg.type(); |
| 115 | if (type == ServiceMessageType::kSrvStartServer) { |
| 116 | auto sub = msg.start_server(); |
| 117 | std::vector<std::string> args; |
| 118 | for (int i = 0; i < sub.args_size(); i++) { |
| 119 | args.push_back(sub.args(i)); |
| 120 | } |
| 121 | ProcessStartRender(sub.work_dir(), sub.app_path(), args); |
| 122 | } |
| 123 | else if (type == ServiceMessageType::kSrvStopServer) { |
| 124 | ProcessStopRender(); |
| 125 | } |
| 126 | else if (type == ServiceMessageType::kSrvRestartServer) { |
| 127 | auto sub = msg.restart_server(); |
| 128 | std::vector<std::string> args; |
| 129 | for (int i = 0; i < sub.args_size(); i++) { |
| 130 | args.push_back(sub.args(i)); |
| 131 | } |
| 132 | ProcessRestartRender(sub.work_dir(), sub.app_path(), args); |
| 133 | } |
| 134 | else if (type == ServiceMessageType::kSrvHeartBeat) { |
| 135 | auto sub = msg.heart_beat(); |
| 136 | sw->from_ = sub.from(); |
| 137 | ProcessHeartBeat(sub.index()); |
| 138 | } |
| 139 | else if (type == ServiceMessageType::kSrvReqCtrlAltDelete) { |
| 140 | auto sub = msg.req_ctrl_alt_delete(); |
| 141 | ProcessCtrlAltDelete(); |
| 142 | LOGI("client, id:{}, device id: {}, request control alt delete", sub.req_device_id(), sub.req_stream_id()); |
| 143 | } |
| 144 | } |
| 145 | catch(...) { |
| 146 | LOGE("Parse message failed!"); |
| 147 | } |
| 148 | } |
| 149 | |
| 150 | void ServiceMsgServer::ProcessStartRender(const std::string& work_dir, const std::string& app_path, const std::vector<std::string>& args) { |
| 151 | if (!render_manager_->StartDesktopRender(work_dir, app_path, args)) { |