mirror of
https://github.com/openharmony/distributedhardware_distributed_input.git
synced 2026-07-22 06:15:34 -04:00
013181cd2b
Signed-off-by: litiangang4 <litiangang4@huawei.com>
226 lines
7.2 KiB
C++
226 lines
7.2 KiB
C++
/*
|
|
* Copyright (c) 2022-2023 Huawei Device Co., Ltd.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "hidumper.h"
|
|
|
|
#include "dinput_errcode.h"
|
|
#include "dinput_log.h"
|
|
#include "dinput_softbus_define.h"
|
|
#include "dinput_utils_tool.h"
|
|
|
|
namespace OHOS {
|
|
namespace DistributedHardware {
|
|
namespace DistributedInput {
|
|
IMPLEMENT_SINGLE_INSTANCE(HiDumper);
|
|
namespace {
|
|
const std::string ARGS_HELP = "-h";
|
|
const std::string ARGS_NODE_INFO = "-nodeinfo";
|
|
const std::string ARGS_SESSION_INFO = "-sessioninfo";
|
|
|
|
const std::map<std::string, HiDumperFlag> ARGS_MAP = {
|
|
{ARGS_HELP, HiDumperFlag::GET_HELP},
|
|
{ARGS_NODE_INFO, HiDumperFlag::GET_NODE_INFO},
|
|
{ARGS_SESSION_INFO, HiDumperFlag::GET_SESSION_INFO},
|
|
};
|
|
|
|
const std::map<SessionStatus, std::string> SESSION_STATUS = {
|
|
{SessionStatus::CLOSED, "closed"},
|
|
{SessionStatus::OPENING, "opening"},
|
|
{SessionStatus::OPENED, "opened"},
|
|
{SessionStatus::CLOSING, "closing"},
|
|
};
|
|
}
|
|
|
|
bool HiDumper::HiDump(const std::vector<std::string> &args, std::string &result)
|
|
{
|
|
if (args.empty()) {
|
|
DHLOGE("args is empty");
|
|
return false;
|
|
}
|
|
|
|
result.clear();
|
|
int32_t argsSize = static_cast<int32_t>(args.size());
|
|
for (int32_t i = 0; i < argsSize; i++) {
|
|
DHLOGI("HiDumper Dump args[%d]: %s.", i, args.at(i).c_str());
|
|
}
|
|
if (ProcessDump(args[0], result) != DH_SUCCESS) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
int32_t HiDumper::ProcessDump(const std::string &args, std::string &result)
|
|
{
|
|
DHLOGI("ProcessDump Dump.");
|
|
int32_t ret = ERR_DH_INPUT_HIDUMP_INVALID_ARGS;
|
|
result.clear();
|
|
|
|
std::map<std::string, HiDumperFlag>::const_iterator operatorIter;
|
|
{
|
|
std::lock_guard<std::mutex> lock(operationMutex_);
|
|
operatorIter = ARGS_MAP.find(args);
|
|
if (operatorIter == ARGS_MAP.end()) {
|
|
result.append("unknown command");
|
|
DHLOGI("ProcessDump");
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
HiDumperFlag hidumperFlag = operatorIter->second;
|
|
switch (hidumperFlag) {
|
|
case HiDumperFlag::GET_HELP: {
|
|
ret = ShowHelp(result);
|
|
break;
|
|
}
|
|
case HiDumperFlag::GET_NODE_INFO: {
|
|
ret = GetAllNodeInfos(result);
|
|
break;
|
|
}
|
|
case HiDumperFlag::GET_SESSION_INFO: {
|
|
ret = GetSessionInfo(result);
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
int32_t HiDumper::GetAllNodeInfos(std::string &result)
|
|
{
|
|
DHLOGI("GetAllNodeInfos Dump.");
|
|
std::lock_guard<std::mutex> node_lock(nodeMutex_);
|
|
for (auto iter = nodeInfos_.begin(); iter != nodeInfos_.end(); iter++) {
|
|
result.append("\n{");
|
|
result.append("\n deviceid : ");
|
|
result.append(GetAnonyString((*iter).devId));
|
|
result.append("\n nodename : ");
|
|
result.append((*iter).virNodeName);
|
|
result.append("\n dhId : ");
|
|
result.append(GetAnonyString((*iter).inputDhId));
|
|
result.append("\n},");
|
|
}
|
|
return DH_SUCCESS;
|
|
}
|
|
|
|
void HiDumper::DeleteNodeInfo(const std::string &deviceId, const std::string &dhId)
|
|
{
|
|
DHLOGI("DeleteNodeInfo Dump.");
|
|
std::lock_guard<std::mutex> node_lock(nodeMutex_);
|
|
for (auto iter = nodeInfos_.begin(); iter != nodeInfos_.end();) {
|
|
if ((*iter).devId.compare(deviceId) == 0 && (*iter).inputDhId.compare(dhId) == 0) {
|
|
iter = nodeInfos_.erase(iter);
|
|
} else {
|
|
iter++;
|
|
}
|
|
}
|
|
}
|
|
|
|
int32_t HiDumper::GetSessionInfo(std::string &result)
|
|
{
|
|
DHLOGI("GetSessionInfo Dump.");
|
|
std::lock_guard<std::mutex> lock(sessionMutex_);
|
|
for (auto iter = sessionInfos_.begin(); iter != sessionInfos_.end(); iter++) {
|
|
result.append("\n{");
|
|
result.append("\n remotedevid : ");
|
|
result.append(GetAnonyString(iter->first));
|
|
result.append("\n sessionid : ");
|
|
result.append(std::to_string(iter->second.sesId));
|
|
result.append("\n mysessionname : ");
|
|
result.append(iter->second.mySesName);
|
|
result.append("\n peersessionname : ");
|
|
result.append(iter->second.peerSesName);
|
|
|
|
std::string sessionStatus("");
|
|
auto item = SESSION_STATUS.find(iter->second.sessionState);
|
|
if (item == SESSION_STATUS.end()) {
|
|
sessionStatus = "unknown state";
|
|
} else {
|
|
sessionStatus = SESSION_STATUS.find(iter->second.sessionState)->second;
|
|
}
|
|
result.append("\n sessionstate : ");
|
|
result.append(sessionStatus);
|
|
result.append("\n},");
|
|
}
|
|
return DH_SUCCESS;
|
|
}
|
|
|
|
void HiDumper::DeleteSessionInfo(const std::string &remoteDevId)
|
|
{
|
|
DHLOGI("DeleteSessionInfo Dump.");
|
|
std::lock_guard<std::mutex> session_lock(sessionMutex_);
|
|
auto iter = sessionInfos_.find(remoteDevId);
|
|
if (iter == sessionInfos_.end()) {
|
|
DHLOGI("remote deviceid does not exist");
|
|
return;
|
|
} else {
|
|
sessionInfos_.erase(iter);
|
|
}
|
|
}
|
|
|
|
int32_t HiDumper::ShowHelp(std::string &result)
|
|
{
|
|
DHLOGI("ShowHelp Dump.");
|
|
result.append("Usage:dump <command> [options]\n")
|
|
.append("Description:\n")
|
|
.append("-nodeinfo ")
|
|
.append("dump all input node information in the system\n")
|
|
.append("-sessioninfo ")
|
|
.append("dump all input session information in the system\n");
|
|
return DH_SUCCESS;
|
|
}
|
|
|
|
void HiDumper::SaveNodeInfo(const std::string &deviceId, const std::string &nodeName, const std::string &dhId)
|
|
{
|
|
std::lock_guard<std::mutex> node_lock(nodeMutex_);
|
|
NodeInfo nodeInfo = {
|
|
.devId = deviceId,
|
|
.virNodeName = nodeName,
|
|
.inputDhId = dhId,
|
|
};
|
|
nodeInfos_.push_back(nodeInfo);
|
|
}
|
|
|
|
void HiDumper::CreateSessionInfo(const std::string &remoteDevId, const int32_t &sessionId,
|
|
const std::string &mySessionName, const std::string &peerSessionName, const SessionStatus &sessionStatus)
|
|
{
|
|
std::lock_guard<std::mutex> session_lock(sessionMutex_);
|
|
auto iter = sessionInfos_.find(remoteDevId);
|
|
if (iter == sessionInfos_.end()) {
|
|
SessionInfo sessionInfo = {
|
|
.sesId = sessionId,
|
|
.mySesName = mySessionName,
|
|
.peerSesName = peerSessionName,
|
|
.sessionState = sessionStatus,
|
|
};
|
|
sessionInfos_[remoteDevId] = sessionInfo;
|
|
}
|
|
}
|
|
|
|
void HiDumper::SetSessionStatus(const std::string &remoteDevId, const SessionStatus &sessionStatus)
|
|
{
|
|
std::lock_guard<std::mutex> session_lock(sessionMutex_);
|
|
auto iter = sessionInfos_.find(remoteDevId);
|
|
if (iter == sessionInfos_.end()) {
|
|
DHLOGI("remote deviceid does not exist");
|
|
return;
|
|
}
|
|
sessionInfos_[remoteDevId].sessionState = sessionStatus;
|
|
}
|
|
} // namespace DistributedInput
|
|
} // namespace DistributedHardware
|
|
} // namespace OHOS
|
|
|