}
};
+var EventReplyListenerManager = new utils_.CommonListenerManager(
+ native_,
+ '_EventReplyListener'
+);
+EventReplyListenerManager.listenerIdToRequestId = {};
+
var ServerCommandListener = new ListenerManager(
native_,
'_ServerCommandListener',
function MediaControllerClient() {}
+var EventReceivedCallback = function(msg, listener) {
+ var result = listener(msg.serverName, msg.eventName, msg.eventData);
+ if (type_.isUndefined(result)) {
+ result = null;
+ }
+ var nativeData = {
+ result: result.data,
+ resultCode: result.resultCode,
+ serverName: msg.serverName,
+ requestId: msg.requestId
+ };
+ //var nativeResult = native_.callSync('MediaControllerClient_sendEventReply', nativeData);
+ //if (native_.isFailure(nativeResult)) {
+ // throw native_.getErrorObject(nativeResult);
+ //}
+};
+
+MediaControllerClient.prototype.setCustomEventListener = function(listener) {
+ var args = validator_.validateArgs(arguments, [
+ { name: 'listener', type: types_.FUNCTION }
+ ]);
+
+ var result = native_.callSync('MediaControllerClient_setCustomEventListener', {
+ listenerId: 'MediaControllerClientEventsListener'
+ });
+
+ if (native_.isFailure(result)) {
+ throw native_.getErrorObject(result);
+ } else {
+ native_.addListener('MediaControllerClientEventsListener', function(msg) {
+ EventReceivedCallback(msg, listener);
+ });
+ }
+};
+
MediaControllerClient.prototype.findServers = function(successCallback, errorCallback) {
var args = validator_.validateArgs(arguments, [
{ name: 'successCallback', type: types_.FUNCTION },
using common::PlatformResult;
using common::tools::ReportError;
using common::tools::ReportSuccess;
+using common::BundleJsonIterator;
MediaControllerClient::MediaControllerClient() : handle_(nullptr), subscribed_servers{} {
ScopeLogger();
return PlatformResult(ErrorCode::NO_ERROR);
}
+PlatformResult MediaControllerClient::SetCustomEventListener(const JsonCallback& callback) {
+ ScopeLogger();
+ int ret = mc_client_set_custom_event_received_cb(handle_, OnEventReceived, this);
+ if (MEDIA_CONTROLLER_ERROR_NONE != ret) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Failed to set custom event listener",
+ ("mc_client_set_custom_event_received_cb() error: %d, message: %s",
+ ret, get_error_message(ret)));
+ }
+ custom_event_listener_ = callback;
+ return PlatformResult(ErrorCode::NO_ERROR);
+}
+
PlatformResult MediaControllerClient::FindServers(picojson::array* servers) {
ScopeLogger();
int ret;
client->display_rotation_update_listener(&data);
}
+void MediaControllerClient::OnEventReceived(const char* server_name, const char* request_id,
+ const char* event_name, bundle* data, void* user_data) {
+ ScopeLogger();
+ auto* client = static_cast<MediaControllerClient*>(user_data);
+
+ auto args = picojson::value(picojson::object());
+ auto& args_obj = args.get<picojson::object>();
+
+ picojson::array array;
+ bundle_foreach(data, BundleJsonIterator, &array);
+
+ args_obj[kServerName] = picojson::value(std::string(server_name));
+ args_obj[kEventName] = picojson::value(std::string(event_name));
+ args_obj[kEventData] = picojson::value(array);
+ args_obj[kRequestId] = picojson::value(std::string(request_id));
+
+ if (nullptr != client->custom_event_listener_) {
+ client->custom_event_listener_(&args);
+ } else {
+ LoggerW("custom_event_listener_ is not set");
+ }
+}
+
} // namespace mediacontroller
} // namespace extension
common::PlatformResult SetDisplayRotationInfoChangeListener(const JsonCallback& callback);
common::PlatformResult UnsetDisplayRotationInfoChangeListener();
+ common::PlatformResult SetCustomEventListener(const JsonCallback& callback);
+
private:
mc_client_h handle_;
JsonCallback command_reply_callback_;
JsonCallback playlist_update_listener_;
JsonCallback ability_listener_;
- // subtitles
JsonCallback subtitles_update_listener_;
- // mode 360
JsonCallback mode360_update_listener_;
- // display mode
JsonCallback display_mode_update_listener_;
- // displayRotation
JsonCallback display_rotation_update_listener;
+ JsonCallback custom_event_listener_;
std::list<std::string> subscribed_servers;
// displayRotation
static void OnDisplayRotationUpdate(const char* server_name, mc_display_rotation_e rotation,
void* user_data);
+ static void OnEventReceived(const char* server_name, const char* request_id, const char* event,
+ bundle* data, void* user_data);
};
} // namespace mediacontroller
REGISTER_SYNC("MediaControllerClient_getSimpleAbility", MediaControllerClientGetSimpleAbility);
REGISTER_ASYNC("MediaControllerClient_findSubscribedServers",
MediaControllerClientFindSubscribedServers);
+ REGISTER_SYNC("MediaControllerClient_setCustomEventListener",
+ MediaControllerClientSetCustomEventListener);
// server_info
REGISTER_SYNC("MediaControllerServerInfo_sendPlaybackState",
ReportSuccess(out);
}
+void MediaControllerInstance::MediaControllerClientSetCustomEventListener(
+ const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+ if (!client_) {
+ LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out,
+ ("Failed: client_"));
+ return;
+ }
+
+ CHECK_ARGS(args, kListenerId, std::string, out);
+
+ JsonCallback callback = [this, args](picojson::value* data) -> void {
+ if (nullptr == data) {
+ LoggerE("No data passed to json callback");
+ return;
+ }
+
+ picojson::object& request_o = data->get<picojson::object>();
+ request_o[kListenerId] = args.get(kListenerId);
+
+ Instance::PostMessage(this, data->serialize().c_str());
+ };
+
+ auto result = client_->SetCustomEventListener(callback);
+ if (!result) {
+ LogAndReportError(result, &out);
+ return;
+ }
+
+ ReportSuccess(out);
+}
+
void MediaControllerInstance::MediaControllerClientFindServers(const picojson::value& args,
picojson::object& out) {
ScopeLogger();
picojson::object& out);
void MediaControllerClientFindSubscribedServers(const picojson::value& args,
picojson::object& out);
+ void MediaControllerClientSetCustomEventListener(const picojson::value& args,
+ picojson::object& out);
// serverInfo
void MediaControllerServerInfoSendPlaybackState(const picojson::value& args,
const char* kDisplayRotation = "displayRotation";
const char* kDisplayRotationAbility = "displayRotationAbility";
const char* kEnabled = "enabled";
+const char* kEpisode = "episode";
+const char* kEpisodeNumber = "episodeNumber";
+const char* kEpisodeTitle = "episodeTitle";
+const char* kEventData = "eventData";
+const char* kEventName = "eventName";
const char* kExtraData = "extraData";
const char* kIconURI = "iconURI";
const char* kIndex = "index";
const char* kReply = "reply";
const char* kRequest = "request";
const char* kRequestId = "requestId";
+const char* kResolution = "resolution";
+const char* kResolutionHeight = "resolutionHeight";
+const char* kResolutionWidth = "resolutionWidth";
const char* kResult = "result";
+const char* kSeason = "season";
+const char* kSeasonNumber = "seasonNumber";
+const char* kSeasonTitle = "seasonTitle";
const char* kServerName = "serverName";
const char* kShuffleMode = "shuffleMode";
const char* kState = "state";
const char* kSupport = "support";
const char* kType = "type";
const char* kValue = "value";
-const char* kSeason = "season";
-const char* kSeasonNumber = "seasonNumber";
-const char* kSeasonTitle = "seasonTitle";
-const char* kEpisode = "episode";
-const char* kEpisodeNumber = "episodeNumber";
-const char* kEpisodeTitle = "episodeTitle";
-const char* kResolution = "resolution";
-const char* kResolutionWidth = "resolutionWidth";
-const char* kResolutionHeight = "resolutionHeight";
} // attributes
extern const char* kDisplayRotation;
extern const char* kDisplayRotationAbility;
extern const char* kEnabled;
+extern const char* kEventData;
+extern const char* kEventName;
extern const char* kExtraData;
extern const char* kIconURI;
extern const char* kIndex;