• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef OHOS_AVSESSION_SERVER_H
17 #define OHOS_AVSESSION_SERVER_H
18 
19 #include <map>
20 #include <mutex>
21 
22 #include "json/json.h"
23 #include "app_manager_adapter.h"
24 #include "avcontroller_item.h"
25 #include "avsession_info.h"
26 #include "softbus/softbus_session_server.h"
27 
28 namespace OHOS::AVSession {
29 class AVSessionService;
30 class AVControllerObserver;
31 
32 class MigrateAVSessionServer : public SessionListener, public SoftbusSessionServer,
33     public std::enable_shared_from_this<MigrateAVSessionServer> {
34 public:
MigrateAVSessionServer()35     MigrateAVSessionServer() {}
~MigrateAVSessionServer()36     ~MigrateAVSessionServer() {}
37 
38     void OnConnectProxy(const std::string &deviceId) override;
39     void OnDisconnectProxy(const std::string &deviceId) override;
40     int32_t GetCharacteristic() override;
41     void OnBytesReceived(const std::string &deviceId, const std::string &data) override;
42 
43     void Init(AVSessionService *ptr);
44 
45     void OnSessionCreate(const AVSessionDescriptor &descriptor) override;
46     void OnSessionRelease(const AVSessionDescriptor &descriptor) override;
47     void OnTopSessionChange(const AVSessionDescriptor &descriptor) override;
OnAudioSessionChecked(const int32_t uid)48     void OnAudioSessionChecked(const int32_t uid) override {}
49 
50     void OnMetaDataChange(const std::string &playerId, const AVMetaData &data);
51     void OnPlaybackStateChanged(const std::string &playerId, const AVPlaybackState &state);
52 
53 private:
54     std::map<std::string, sptr<AVControllerItem>> playerIdToControllerMap_;
55     std::map<std::string, std::shared_ptr<AVControllerObserver>> playerIdToControllerCallbackMap_;
56     std::list<sptr<AVControllerItem>> sortControllerList_;
57 
58     void ObserveControllerChanged(const std::string &deviceId);
59     void StopObserveControllerChanged(const std::string &deviceId);
60     void CreateController(const std::string &sessionId);
61     void UpdateCache(const std::string &sessionId, sptr<AVControllerItem> avcontroller,
62         std::shared_ptr<AVControllerObserver> callback, bool isAdd);
63     void ClearCacheBySessionId(const std::string &sessionId);
64     void SendRemoteControllerList(const std::string &deviceId);
65     int32_t ConvertStateFromSingleToDouble(int32_t state);
66 
67     int32_t GetControllerById(const std::string &sessionId, sptr<AVControllerItem> &controller);
68 
69     std::string ConvertControllersToStr(sptr<AVControllerItem> avcontroller);
70 
71     Json::Value ConvertControllerToJson(sptr<AVControllerItem> avcontroller);
72 
73     Json::Value ConvertMetadataToJson(const AVMetaData &metadata);
74 
75     std::string ConvertMetadataInfoToStr(const std::string playerId, int32_t controlCommand,
76         const AVMetaData &metadata);
77 
78     std::string RebuildPlayState(const AVPlaybackState &playbackState);
79     void SortControllers(std::list<sptr<AVControllerItem>> avcontrollerList);
80 
81     void ProcControlCommand(const std::string &data);
82     void SendCommandProc(const std::string &command, sptr<AVControllerItem> controller);
83     void MediaButtonEventProc(const std::string &command, sptr<AVControllerItem> controller);
84     void CommandWithExtrasProc(int mediaCommand, const std::string &extrasCommand, const std::string &extras,
85         sptr<AVControllerItem> controller);
86     void PlaybackCommandDataProc(int mediaCommand, const std::string &extrasCommand, sptr<AVControllerItem> controller);
87     void SendSpecialKeepaliveData();
88     std::string GetBundleName(std::string sessionId);
89 
90     AVSessionService *servicePtr_;
91     bool isSoftbusConnecting_ = false;
92     std::string deviceId_;
93     std::string topSessionId_;
94     std::recursive_mutex migrateControllerLock_;
95     std::recursive_mutex topSessionLock_;
96 };
97 
98 class AVControllerObserver : public AVControllerCallback {
99 public:
AVControllerObserver(const std::string & playerId)100     explicit AVControllerObserver(const std::string &playerId) : playerId_(playerId){};
AVControllerObserver()101     AVControllerObserver() {};
~AVControllerObserver()102     ~AVControllerObserver() {};
103 
104     void Init(std::weak_ptr<MigrateAVSessionServer> migrateServer);
105 
106     void OnSessionDestroy() override;
107     void OnPlaybackStateChange(const AVPlaybackState &state) override;
108     void OnMetaDataChange(const AVMetaData &data) override;
OnAVCallMetaDataChange(const AVCallMetaData & avCallMetaData)109     void OnAVCallMetaDataChange(const AVCallMetaData &avCallMetaData) override {}
OnAVCallStateChange(const AVCallState & avCallState)110     void OnAVCallStateChange(const AVCallState &avCallState) override {}
OnActiveStateChange(bool isActive)111     void OnActiveStateChange(bool isActive) override {}
OnValidCommandChange(const std::vector<int32_t> & cmds)112     void OnValidCommandChange(const std::vector<int32_t> &cmds) override {}
OnOutputDeviceChange(const int32_t connectionState,const OutputDeviceInfo & outputDeviceInfo)113     void OnOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo &outputDeviceInfo) override {}
OnSessionEventChange(const std::string & event,const AAFwk::WantParams & args)114     void OnSessionEventChange(const std::string &event, const AAFwk::WantParams &args) override {}
OnQueueItemsChange(const std::vector<AVQueueItem> & items)115     void OnQueueItemsChange(const std::vector<AVQueueItem> &items) override {}
OnQueueTitleChange(const std::string & title)116     void OnQueueTitleChange(const std::string &title) override {}
OnExtrasChange(const AAFwk::WantParams & extras)117     void OnExtrasChange(const AAFwk::WantParams &extras) override {}
118 
119 private:
120     std::weak_ptr<MigrateAVSessionServer> migrateServer_;
121     std::string playerId_;
122 };
123 } // namespace OHOS::AVSession
124 #endif // OHOS_AVSESSION_SERVER_H