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