1686862fbSopenharmony_ci/*
2686862fbSopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3686862fbSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4686862fbSopenharmony_ci * you may not use this file except in compliance with the License.
5686862fbSopenharmony_ci * You may obtain a copy of the License at
6686862fbSopenharmony_ci *
7686862fbSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8686862fbSopenharmony_ci *
9686862fbSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10686862fbSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11686862fbSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12686862fbSopenharmony_ci * See the License for the specific language governing permissions and
13686862fbSopenharmony_ci * limitations under the License.
14686862fbSopenharmony_ci */
15686862fbSopenharmony_ci
16686862fbSopenharmony_ci#ifndef OHOS_DISTRIBUTED_DNETWORK_ADAPTER_H
17686862fbSopenharmony_ci#define OHOS_DISTRIBUTED_DNETWORK_ADAPTER_H
18686862fbSopenharmony_ci
19686862fbSopenharmony_ci#include <iosfwd>
20686862fbSopenharmony_ci#include <memory>
21686862fbSopenharmony_ci#include <mutex>
22686862fbSopenharmony_ci#include <set>
23686862fbSopenharmony_ci#include <string>
24686862fbSopenharmony_ci
25686862fbSopenharmony_ci#include "device_manager.h"
26686862fbSopenharmony_ci#include "event_handler.h"
27686862fbSopenharmony_ci#include "nocopyable.h"
28686862fbSopenharmony_ci
29686862fbSopenharmony_cinamespace OHOS {
30686862fbSopenharmony_cinamespace DistributedSchedule {
31686862fbSopenharmony_cienum DeviceInfoType {
32686862fbSopenharmony_ci    UNKNOWN_INFO = 0,
33686862fbSopenharmony_ci    BASIC_INFO = 1,
34686862fbSopenharmony_ci    NETWORK_INFO = 2,
35686862fbSopenharmony_ci    TRUST_INFO = 3,
36686862fbSopenharmony_ci};
37686862fbSopenharmony_ci
38686862fbSopenharmony_cienum NodeDeviceInfoKey {
39686862fbSopenharmony_ci    NODE_KEY_UDID = 0,
40686862fbSopenharmony_ci    NODE_KEY_UUID = 1,
41686862fbSopenharmony_ci};
42686862fbSopenharmony_ci
43686862fbSopenharmony_ciclass DeviceListener {
44686862fbSopenharmony_cipublic:
45686862fbSopenharmony_ci    DeviceListener() = default;
46686862fbSopenharmony_ci    virtual ~DeviceListener() = default;
47686862fbSopenharmony_ci
48686862fbSopenharmony_ci    virtual void OnDeviceOnline(const DistributedHardware::DmDeviceInfo& deviceInfo) = 0;
49686862fbSopenharmony_ci    virtual void OnDeviceOffline(const DistributedHardware::DmDeviceInfo& deviceInfo) = 0;
50686862fbSopenharmony_ci    virtual void OnDeviceInfoChanged(const DistributedHardware::DmDeviceInfo& deviceInfo) = 0;
51686862fbSopenharmony_ci};
52686862fbSopenharmony_ci
53686862fbSopenharmony_ciclass DnetworkAdapter {
54686862fbSopenharmony_cipublic:
55686862fbSopenharmony_ci    DnetworkAdapter() = default;
56686862fbSopenharmony_ci    ~DnetworkAdapter() = default;
57686862fbSopenharmony_ci
58686862fbSopenharmony_ci    void Init();
59686862fbSopenharmony_ci    bool AddDeviceChangeListener(const std::shared_ptr<DeviceListener>& listener);
60686862fbSopenharmony_ci    void RemoveDeviceChangeListener(const std::shared_ptr<DeviceListener>& listener);
61686862fbSopenharmony_ci    std::string GetUdidByNetworkId(const std::string& networkId);
62686862fbSopenharmony_ci    std::string GetUuidByNetworkId(const std::string& networkId);
63686862fbSopenharmony_ci    bool GetLocalBasicInfo(DistributedHardware::DmDeviceInfo& dmDeviceInfo);
64686862fbSopenharmony_ci
65686862fbSopenharmony_ci    static std::shared_ptr<DnetworkAdapter> GetInstance();
66686862fbSopenharmony_ci    bool UpdateDeviceInfoStorage();
67686862fbSopenharmony_ci
68686862fbSopenharmony_ciprivate:
69686862fbSopenharmony_ci    DISALLOW_COPY_AND_MOVE(DnetworkAdapter);
70686862fbSopenharmony_ci
71686862fbSopenharmony_ci    static std::shared_ptr<AppExecFwk::EventHandler> dnetworkHandler_;
72686862fbSopenharmony_ci    static std::mutex listenerSetMutex_;
73686862fbSopenharmony_ci    static std::set<std::shared_ptr<DeviceListener>> listenerSet_;
74686862fbSopenharmony_ci
75686862fbSopenharmony_ci    std::shared_ptr<DistributedHardware::DeviceStateCallback> stateCallback_;
76686862fbSopenharmony_ci    std::shared_ptr<DistributedHardware::DevTrustChangeCallback> devTrustChangeCallback_;
77686862fbSopenharmony_ci    std::shared_ptr<DistributedHardware::DmInitCallback> initCallback_;
78686862fbSopenharmony_ciclass DeviceInitCallBack : public DistributedHardware::DmInitCallback {
79686862fbSopenharmony_ci    void OnRemoteDied() override;
80686862fbSopenharmony_ci};
81686862fbSopenharmony_ci
82686862fbSopenharmony_ciclass DmsDeviceStateCallback : public DistributedHardware::DeviceStateCallback {
83686862fbSopenharmony_ci    void OnDeviceOnline(const DistributedHardware::DmDeviceInfo& deviceInfo) override;
84686862fbSopenharmony_ci    void OnDeviceOffline(const DistributedHardware::DmDeviceInfo& deviceInfo) override;
85686862fbSopenharmony_ci    void OnDeviceChanged(const DistributedHardware::DmDeviceInfo& deviceInfo) override;
86686862fbSopenharmony_ci    void OnDeviceReady(const DistributedHardware::DmDeviceInfo& deviceInfo) override;
87686862fbSopenharmony_ci};
88686862fbSopenharmony_ci
89686862fbSopenharmony_ciclass DmsDevTrustChangeCallback : public DistributedHardware::DevTrustChangeCallback {
90686862fbSopenharmony_ci    void OnDeviceTrustChange(const std::string &udid, const std::string &uuid,
91686862fbSopenharmony_ci        const DistributedHardware::DmAuthForm authform) override;
92686862fbSopenharmony_ci};
93686862fbSopenharmony_ci};
94686862fbSopenharmony_ci} // namespace DistributedSchedule
95686862fbSopenharmony_ci} // namespace OHOS
96686862fbSopenharmony_ci#endif // OHOS_DISTRIBUTED_DNETWORK_ADAPTER_H