Pigeon: Integrated onMessageReceived API

This commit is contained in:
gianlucaparadise 2021-11-01 19:38:46 +01:00
parent 5c411c508f
commit 6dd7e3b8de
9 changed files with 27 additions and 50 deletions

View file

@ -52,12 +52,13 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
methodChannel.setMethodCallHandler(this)
channel = methodChannel
mMessageCastingChannel = MessageCastingChannel(methodChannel)
castApi = MyApi()
HostApis.CastApi.setup(messenger, castApi)
flutterApi = HostApis.CastFlutterApi(messenger)
val castFlutterApi = HostApis.CastFlutterApi(messenger)
flutterApi = castFlutterApi
mMessageCastingChannel = MessageCastingChannel(castFlutterApi)
CastContext.getSharedInstance(applicationContext).addCastStateListener { i ->
Log.d(TAG, "Cast state changed: $i")

View file

@ -1,5 +0,0 @@
package com.gianlucaparadise.flutter_cast_framework
object MethodNames {
const val onMessageReceived = "CastSession.onMessageReceived"
}

View file

@ -2,25 +2,22 @@ package com.gianlucaparadise.flutter_cast_framework.cast
import android.util.Log
import com.gianlucaparadise.flutter_cast_framework.HostApis
import com.gianlucaparadise.flutter_cast_framework.MethodNames
import com.google.android.gms.cast.Cast
import com.google.android.gms.cast.CastDevice
import com.google.android.gms.cast.framework.CastSession
import io.flutter.plugin.common.MethodChannel
class MessageCastingChannel(private val channel: MethodChannel) : Cast.MessageReceivedCallback {
class MessageCastingChannel(private val flutterApi : HostApis.CastFlutterApi) : Cast.MessageReceivedCallback {
companion object {
const val TAG = "MessageCastingChannel"
}
override fun onMessageReceived(castDevice: CastDevice?, namespace: String?, message: String?) {
Log.d(TAG, "Message received: $message:")
val argsMap: HashMap<String, String?> = hashMapOf(
"namespace" to namespace,
"message" to message
)
val castMessage = HostApis.CastMessage()
castMessage.namespace = namespace
castMessage.message = message
channel.invokeMethod(MethodNames.onMessageReceived, argsMap)
flutterApi.onMessageReceived(castMessage) {}
}
fun sendMessage(castSession: CastSession?, castMessage: HostApis.CastMessage?) {

View file

@ -10,23 +10,23 @@ import GoogleCast
class MessageCastingChannel : GCKCastChannel {
let channel: FlutterMethodChannel
let flutterApi: CastFlutterApi
let namespace: String
init(namespace: String, channel: FlutterMethodChannel) {
self.channel = channel
init(namespace: String, flutterApi: CastFlutterApi) {
self.flutterApi = flutterApi
self.namespace = namespace
super.init(namespace: namespace)
}
override func didReceiveTextMessage(_ message: String) {
print("Message received: .\(message)")
let argsMap: NSDictionary = [
"namespace": namespace,
"message": message
]
channel.invokeMethod(MethodNames.onMessageReceived.rawValue, arguments: argsMap)
let castMessage = CastMessage.init()
castMessage.namespace = namespace
castMessage.message = message
flutterApi.onMessageReceivedMessage(castMessage) { (_: Error?) in
}
}
public static func sendMessage(allCastingChannels: Dictionary<String, MessageCastingChannel>, castMessage: CastMessage) {

View file

@ -1,12 +0,0 @@
//
// MethodNames.swift
// flutter_cast_framework
//
// Created by Gianluca Paradiso on 09/11/2019.
//
import Foundation
enum MethodNames : String {
case onMessageReceived = "CastSession.onMessageReceived"
}

View file

@ -54,7 +54,7 @@ public class SwiftFlutterCastFrameworkPlugin: NSObject, FlutterPlugin, GCKSessio
}
namespaces.forEach({ (namespace) in
let castingChannel = MessageCastingChannel.init(namespace: namespace, channel: self.channel)
let castingChannel = MessageCastingChannel.init(namespace: namespace, flutterApi: self.flutterApi)
self.castingChannels[namespace] = castingChannel
newSession?.add(castingChannel)
})

View file

@ -1,3 +0,0 @@
class PlatformMethodNames {
static const onMessageReceived = "CastSession.onMessageReceived";
}

View file

@ -29,12 +29,12 @@ class SessionManager {
MessageReceivedCallback? onMessageReceived;
void platformOnMessageReceived(dynamic arguments) {
void platformOnMessageReceived(CastMessage castMessage) {
var thisOnMessageReceived = onMessageReceived;
if (thisOnMessageReceived == null) return;
final namespace = arguments['namespace'];
final message = arguments['message'];
final namespace = castMessage.namespace ?? "";
final message = castMessage.message ?? "";
thisOnMessageReceived(namespace, message);
}

View file

@ -3,7 +3,6 @@ import 'package:flutter/services.dart';
import 'package:flutter_cast_framework/cast.dart';
import 'HostApis.dart';
import 'MethodNames.dart';
import 'cast/CastContext.dart';
class FlutterCastFramework {
@ -24,10 +23,6 @@ class FlutterCastFramework {
debugPrint("Method call on flutter: $method $arguments");
switch (method) {
case PlatformMethodNames.onMessageReceived:
castContext.sessionManager.platformOnMessageReceived(arguments);
break;
default:
debugPrint("Method not handled: $method");
break;
@ -60,10 +55,14 @@ class CastFlutterApiImpl extends CastFlutterApi {
@override
void onCastStateChanged(int castState) {
debugPrint("yoyo onCastStateChanged: $castState");
FlutterCastFramework.castContext.onCastStateChanged(castState);
}
@override
void onMessageReceived(CastMessage castMessage) {
FlutterCastFramework.castContext.sessionManager.platformOnMessageReceived(castMessage);
}
//region Session State handling
@override
void onSessionEnded() {