Skip to content

Commit

Permalink
Integration with flutter_webrtc (#12)
Browse files Browse the repository at this point in the history
- add bindings for `Transport`, `MediaDevices`, `Constraints` and `InputDeviceInfo`

Additionally:
- upgrade Flutter to 2.8.0 version
- support `Boolean`, `Uint8`, `Uint32` and `Uint64` Dart types in `#[dart_bridge]` macro
  • Loading branch information
evdokimovs authored Dec 24, 2021
1 parent 13bf659 commit 1e084b9
Show file tree
Hide file tree
Showing 62 changed files with 1,546 additions and 479 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ jobs:
use-tool-cache: true
- uses: subosito/flutter-action@v1
with:
flutter-version: 2.5.1
flutter-version: 2.8.0

- name: Parse Android NDK versions
id: ndk-version
Expand Down
88 changes: 62 additions & 26 deletions crates/medea-macro/src/dart_codegen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,17 @@ use syn::spanned::Spanned as _;
/// Types that can be passed through FFI.
#[derive(Debug, Clone, Copy)]
pub(crate) enum DartType {
/// Pointer to the Dart `Object`.
///
/// Represents a [Handle] on the Dart side.
///
/// [Handle]: https://api.dart.dev/stable/dart-ffi/Handle-class.html
Handle,

/// [`c_char`] pointer.
///
/// Represents [Pointer<Utf8>][0] on the Dart side.
/// Type which indicates that function doesn't return anything.
///
/// [0]: https://pub.dev/documentation/ffi/latest/ffi/Utf8-class.html
StringPointer,
/// `void` keyword in Dart.
Void,

/// Pointer to a boxed Dart `Object`.
/// Boolean value.
///
/// Represents [Pointer<Handle>][0] on the Dart side.
/// Represents [Bool] on the Dart side.
///
/// [0]: https://api.dart.dev/stable/dart-ffi/Pointer-class.html
HandlePointer,
/// [Bool]: https://api.dart.dev/stable/dart-ffi/Bool-class.html
Bool,

/// 8-bit integer.
///
Expand All @@ -39,31 +30,68 @@ pub(crate) enum DartType {
/// [Int8]: https://api.dart.dev/stable/dart-ffi/Int8-class.html
Int8,

/// 8-bit unsigned integer.
///
/// Represents [Uint8] on the Dart side.
///
/// [Uint8]: https://api.dart.dev/stable/dart-ffi/Uint8-class.html
Uint8,

/// 32-bit integer.
///
/// Represents [Int32] on the Dart side.
///
/// [Int32]: https://api.dart.dev/stable/dart-ffi/Int32-class.html
Int32,

/// 32-bit unsigned integer.
///
/// Represents [Uint32] on the Dart side.
///
/// [Uint32]: https://api.dart.dev/stable/dart-ffi/Uint32-class.html
Uint32,

/// 64-bit integer.
///
/// Represents [Int64] on the Dart side.
///
/// [Int64]: https://api.dart.dev/stable/dart-ffi/Int64-class.html
Int64,

/// 64-bit unsigned integer.
///
/// Represents [Uint64] on the Dart side.
///
/// [Uint64]: https://api.dart.dev/stable/dart-ffi/Uint64-class.html
Uint64,

/// Pointer to the Dart `Object`.
///
/// Represents a [Handle] on the Dart side.
///
/// [Handle]: https://api.dart.dev/stable/dart-ffi/Handle-class.html
Handle,

/// Pointer to the Rust structure.
///
/// Represents [Pointer] on the Dart side.
///
/// [Pointer]: https://api.dart.dev/stable/dart-ffi/Pointer-class.html
Pointer,

/// Type which indicates that function doesn't return anything.
/// Pointer to a boxed Dart `Object`.
///
/// `void` keyword in Dart.
Void,
/// Represents [Pointer<Handle>][0] on the Dart side.
///
/// [0]: https://api.dart.dev/stable/dart-ffi/Pointer-class.html
HandlePointer,

/// [`c_char`] pointer.
///
/// Represents [Pointer<Utf8>][0] on the Dart side.
///
/// [0]: https://pub.dev/documentation/ffi/latest/ffi/Utf8-class.html
StringPointer,

/// `DartValue` FFI structure which adds ability to cast more complex
/// types.
Expand All @@ -74,14 +102,18 @@ impl DartType {
/// Converts this [`DartType`] to the Dart side FFI type.
pub(crate) fn to_ffi_type(self) -> &'static str {
match self {
Self::Handle => "Handle",
Self::StringPointer => "Pointer<Utf8>",
Self::HandlePointer => "Pointer<Handle>",
Self::Void => "Void",
Self::Bool => "Bool",
Self::Int8 => "Int8",
Self::Uint8 => "Uint8",
Self::Int32 => "Int32",
Self::Uint32 => "Uint32",
Self::Int64 => "Int64",
Self::Uint64 => "Uint64",
Self::Handle => "Handle",
Self::Pointer => "Pointer",
Self::Void => "Void",
Self::HandlePointer => "Pointer<Handle>",
Self::StringPointer => "Pointer<Utf8>",
Self::ForeignValue => "ForeignValue",
}
}
Expand Down Expand Up @@ -132,13 +164,17 @@ impl TryFrom<syn::Type> for DartType {
syn::Error::new(p.span(), "Empty path")
})?;
match ty.ident.to_string().as_str() {
"bool" => Self::Bool,
"i8" => Self::Int8,
"u8" => Self::Uint8,
"i32" => Self::Int32,
"u32" => Self::Uint32,
"i64" => Self::Int64,
"u64" => Self::Uint64,
"Dart_Handle" => Self::Handle,
"NonNull" => Self::from_non_null_generic(&ty.arguments)?,
"DartValueArg" | "DartValue" => Self::ForeignValue,
"DartError" => Self::HandlePointer,
"i32" => Self::Int32,
"i64" => Self::Int64,
"i8" => Self::Int8,
_ => {
return Err(syn::Error::new(
ty.ident.span(),
Expand Down
116 changes: 58 additions & 58 deletions flutter/assets/pkg/medea_jason.js
Original file line number Diff line number Diff line change
Expand Up @@ -211,27 +211,27 @@ function makeMutClosure(arg0, arg1, dtor, f) {
return real;
}
function __wbg_adapter_34(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2022fc00a0daa960(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1919a0518e3bc15d(arg0, arg1, addHeapObject(arg2));
}

function __wbg_adapter_37(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2022fc00a0daa960(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1919a0518e3bc15d(arg0, arg1, addHeapObject(arg2));
}

function __wbg_adapter_40(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2022fc00a0daa960(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1919a0518e3bc15d(arg0, arg1, addHeapObject(arg2));
}

function __wbg_adapter_43(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2022fc00a0daa960(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1919a0518e3bc15d(arg0, arg1, addHeapObject(arg2));
}

function __wbg_adapter_46(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2022fc00a0daa960(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1919a0518e3bc15d(arg0, arg1, addHeapObject(arg2));
}

function __wbg_adapter_49(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h6d465b8077092408(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h36627a331f9fe1df(arg0, arg1, addHeapObject(arg2));
}

function _assertClass(instance, klass) {
Expand All @@ -253,7 +253,7 @@ function getArrayU8FromWasm0(ptr, len) {
return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
}
function __wbg_adapter_342(arg0, arg1, arg2, arg3) {
wasm.wasm_bindgen__convert__closures__invoke2_mut__hb6bcf9e4e0912e25(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
wasm.wasm_bindgen__convert__closures__invoke2_mut__hd0d132b7c8de1590(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
}

/**
Expand Down Expand Up @@ -2280,28 +2280,8 @@ async function init(input) {
var ret = getObject(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbg_roomclosereason_new = function(arg0) {
var ret = RoomCloseReason.__wrap(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
var ret = getStringFromWasm0(arg0, arg1);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_string_get = function(arg0, arg1) {
const obj = getObject(arg1);
var ret = typeof(obj) === 'string' ? obj : undefined;
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len0 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
};
imports.wbg.__wbg_inputdeviceinfo_new = function(arg0) {
var ret = InputDeviceInfo.__wrap(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbg_enumeratedevicesexception_new = function(arg0) {
var ret = EnumerateDevicesException.__wrap(arg0);
imports.wbg.__wbg_reconnecthandle_new = function(arg0) {
var ret = ReconnectHandle.__wrap(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbg_localmediatrack_new = function(arg0) {
Expand All @@ -2317,14 +2297,26 @@ async function init(input) {
var ret = false;
return ret;
};
imports.wbg.__wbg_roomclosereason_new = function(arg0) {
var ret = RoomCloseReason.__wrap(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_number_new = function(arg0) {
var ret = arg0;
return addHeapObject(ret);
};
imports.wbg.__wbg_reconnecthandle_new = function(arg0) {
var ret = ReconnectHandle.__wrap(arg0);
imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
var ret = getStringFromWasm0(arg0, arg1);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_string_get = function(arg0, arg1) {
const obj = getObject(arg1);
var ret = typeof(obj) === 'string' ? obj : undefined;
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len0 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
};
imports.wbg.__wbg_connectionhandle_new = function(arg0) {
var ret = ConnectionHandle.__wrap(arg0);
return addHeapObject(ret);
Expand All @@ -2341,6 +2333,10 @@ async function init(input) {
var ret = LocalMediaInitException.__wrap(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbg_enumeratedevicesexception_new = function(arg0) {
var ret = EnumerateDevicesException.__wrap(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbg_rpcclientexception_new = function(arg0) {
var ret = RpcClientException.__wrap(arg0);
return addHeapObject(ret);
Expand Down Expand Up @@ -2377,6 +2373,10 @@ async function init(input) {
var ret = typeof(getObject(arg0)) === 'string';
return ret;
};
imports.wbg.__wbg_inputdeviceinfo_new = function(arg0) {
var ret = InputDeviceInfo.__wrap(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_number_get = function(arg0, arg1) {
const obj = getObject(arg1);
var ret = typeof(obj) === 'number' ? obj : undefined;
Expand All @@ -2401,12 +2401,12 @@ async function init(input) {
wasm.__wbindgen_free(arg0, arg1);
}
};
imports.wbg.__wbg_getRandomValues_98117e9a7e993920 = function() { return handleError(function (arg0, arg1) {
getObject(arg0).getRandomValues(getObject(arg1));
}, arguments) };
imports.wbg.__wbg_randomFillSync_64cc7d048f228ca8 = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_getRandomValues_98117e9a7e993920 = function() { return handleError(function (arg0, arg1) {
getObject(arg0).getRandomValues(getObject(arg1));
}, arguments) };
imports.wbg.__wbg_process_2f24d6544ea7b200 = function(arg0) {
var ret = getObject(arg0).process;
return addHeapObject(ret);
Expand All @@ -2424,6 +2424,10 @@ async function init(input) {
var ret = getObject(arg0).node;
return addHeapObject(ret);
};
imports.wbg.__wbg_modulerequire_3440a4bcf44437db = function() { return handleError(function (arg0, arg1) {
var ret = module.require(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_crypto_98fc271021c7d2ad = function(arg0) {
var ret = getObject(arg0).crypto;
return addHeapObject(ret);
Expand All @@ -2432,10 +2436,6 @@ async function init(input) {
var ret = getObject(arg0).msCrypto;
return addHeapObject(ret);
};
imports.wbg.__wbg_modulerequire_3440a4bcf44437db = function() { return handleError(function (arg0, arg1) {
var ret = module.require(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_instanceof_Window_c4b70662a0d2c5ec = function(arg0) {
var ret = getObject(arg0) instanceof Window;
return ret;
Expand Down Expand Up @@ -2522,14 +2522,6 @@ async function init(input) {
var ret = getObject(arg0).getUserMedia(getObject(arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_data_9e55e7d79ab13ef1 = function(arg0) {
var ret = getObject(arg0).data;
return addHeapObject(ret);
};
imports.wbg.__wbg_candidate_d3ec9190d1a6a676 = function(arg0) {
var ret = getObject(arg0).candidate;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_track_b0aa7a5107340204 = function(arg0) {
var ret = getObject(arg0).track;
return addHeapObject(ret);
Expand All @@ -2538,6 +2530,14 @@ async function init(input) {
var ret = getObject(arg0).transceiver;
return addHeapObject(ret);
};
imports.wbg.__wbg_data_9e55e7d79ab13ef1 = function(arg0) {
var ret = getObject(arg0).data;
return addHeapObject(ret);
};
imports.wbg.__wbg_candidate_d3ec9190d1a6a676 = function(arg0) {
var ret = getObject(arg0).candidate;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_iceConnectionState_905bab998d998769 = function(arg0) {
var ret = getObject(arg0).iceConnectionState;
return addHeapObject(ret);
Expand Down Expand Up @@ -2854,28 +2854,28 @@ async function init(input) {
var ret = wasm.memory;
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper2327 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 659, __wbg_adapter_34);
imports.wbg.__wbindgen_closure_wrapper419 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 108, __wbg_adapter_34);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper2328 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 659, __wbg_adapter_37);
imports.wbg.__wbindgen_closure_wrapper420 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 108, __wbg_adapter_37);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper2331 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 659, __wbg_adapter_40);
imports.wbg.__wbindgen_closure_wrapper421 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 108, __wbg_adapter_40);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper2333 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 659, __wbg_adapter_43);
imports.wbg.__wbindgen_closure_wrapper423 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 108, __wbg_adapter_43);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper2335 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 659, __wbg_adapter_46);
imports.wbg.__wbindgen_closure_wrapper426 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 108, __wbg_adapter_46);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper2556 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 760, __wbg_adapter_49);
imports.wbg.__wbindgen_closure_wrapper2482 = function(arg0, arg1, arg2) {
var ret = makeMutClosure(arg0, arg1, 771, __wbg_adapter_49);
return addHeapObject(ret);
};

Expand Down
Binary file modified flutter/assets/pkg/medea_jason_bg.wasm
Binary file not shown.
Loading

0 comments on commit 1e084b9

Please sign in to comment.