efl/src/bindings/mono/eldbus_mono/eldbus_common.cs

1648 lines
50 KiB
C#
Raw Normal View History

/*
* Copyright 2019 by its authors. See AUTHORS.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma warning disable 1591
using System;
using System.Runtime.InteropServices;
using System.ComponentModel;
using static eldbus.EldbusMessageNativeFunctions;
namespace eldbus
{
/// <summary>
/// Representation for Timeout flags.
/// <para>Since EFL 1.23.</para>
/// </summary>
public static class Timeout
{
/// <summary>
/// Infinite flag.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const int Infinite = 0x7fffffff;
}
/// <summary>
/// The path to an object.
/// <para>Since EFL 1.23.</para>
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct ObjectPath : IEquatable<ObjectPath>
{
/// <summary>
/// The string of the path.
/// <para>Since EFL 1.23.</para>
/// </summary>
public string value;
/// <summary>
/// Constructor
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="str">The string of the path.</param>
public ObjectPath(string str)
{
value = str;
}
/// <summary>
/// Conversion operator of ObjectPath from string.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="str">The string of the path.</param>
public static implicit operator ObjectPath(string str) => FromString(str);
/// <summary>
/// Converts a <see cref="string" /> to a <see cref="ObjectPath" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="str">The <see cref="string" /> of the path.</param>
public static ObjectPath FromString(string str) => new ObjectPath(str);
/// <summary>
/// Conversion operator of string from ObjectPath.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="path">The ObjectPath to be converted.</param>
public static implicit operator string(ObjectPath path) => ToString(path);
/// <summary>
/// Converts a <see cref="ObjectPath" /> to a <see cref="string" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="path">The ObjectPath to be converted.</param>
public static string ToString(ObjectPath path) => path.value;
/// <summary>
/// Gets a hash for <see cref="ObjectPath" />.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <returns>A hash code.</returns>
public override int GetHashCode() => value.GetHashCode();
/// <summary>Returns whether this <see cref="ObjectPath" />
/// is equal to the given <see cref="object" />.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="other">The <see cref="object" /> to be compared to.</param>
/// <returns><c>true</c> if is equal to <c>other</c>.</returns>
public override bool Equals(object other)
=> (!(other is ObjectPath)) ? false : Equals((ObjectPath)other);
/// <summary>Returns whether this <see cref="ObjectPath" /> is equal
/// to the given <see cref="ObjectPath" />.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="other">The <see cref="ObjectPath" /> to be compared to.</param>
/// <returns><c>true</c> if is equal to <c>other</c>.</returns>
public bool Equals(ObjectPath other) => value == other.value;
/// <summary>Returns whether <c>lhs</c> is equal to <c>rhs</c>.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="lhs">The left hand side of the operator.</param>
/// <param name="rhs">The right hand side of the operator.</param>
/// <returns><c>true</c> if <c>lhs</c> is equal
/// to <c>rhs</c>.</returns>
public static bool operator==(ObjectPath lhs, ObjectPath rhs) => lhs.Equals(rhs);
/// <summary>Returns whether <c>lhs</c> is not equal to <c>rhs</c>.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="lhs">The left hand side of the operator.</param>
/// <param name="rhs">The right hand side of the operator.</param>
/// <returns><c>true</c> if <c>lhs</c> is not equal
/// to <c>rhs</c>.</returns>
public static bool operator!=(ObjectPath lhs, ObjectPath rhs) => !(lhs == rhs);
}
/// <summary>
/// String to a signature.
/// <para>Since EFL 1.23.</para>
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct SignatureString : IEquatable<SignatureString>
{
/// <summary>
/// The string of the signature.
/// <para>Since EFL 1.23.</para>
/// </summary>
public string value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="str">The string of the signature.</param>
public SignatureString(string str)
{
value = str;
}
/// <summary>
/// Conversion operator of SignatureString from string.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="str">The string of the signature.</param>
public static implicit operator SignatureString(string str)
=> FromString(str);
/// <summary>
/// Converts a <see cref="string" /> to a <see cref="SignatureString" />
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="str">The string of the signature.</param>
public static SignatureString FromString(string str)
=> new SignatureString(str);
/// <summary>
/// Conversion operator of string from SignatureString.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="sig">The SignatureString to be conversion.</param>
public static implicit operator string(SignatureString sig)
=> ToString(sig);
public static string ToString(SignatureString sig) => sig.value;
/// <summary>
/// Gets a hash for <see cref="SignatureString" />.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <returns>A hash code.</returns>
public override int GetHashCode() => value.GetHashCode();
/// <summary>Returns whether this <see cref="SignatureString" />
/// is equal to the given <see cref="object" />.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="other">The <see cref="object" /> to be compared to.</param>
/// <returns><c>true</c> if is equal to <c>other</c>.</returns>
public override bool Equals(object other)
=> (!(other is SignatureString)) ? false : Equals((SignatureString)other);
/// <summary>Returns whether this <see cref="SignatureString" /> is equal
/// to the given <see cref="SignatureString" />.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="other">The <see cref="SignatureString" /> to be compared to.</param>
/// <returns><c>true</c> if is equal to <c>other</c>.</returns>
public bool Equals(SignatureString other) => value == other.value;
/// <summary>Returns whether <c>lhs</c> is equal to <c>rhs</c>.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="lhs">The left hand side of the operator.</param>
/// <param name="rhs">The right hand side of the operator.</param>
/// <returns><c>true</c> if <c>lhs</c> is equal
/// to <c>rhs</c>.</returns>
public static bool operator==(SignatureString lhs, SignatureString rhs) => lhs.Equals(rhs);
/// <summary>Returns whether <c>lhs</c> is not equal to <c>rhs</c>.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="lhs">The left hand side of the operator.</param>
/// <param name="rhs">The right hand side of the operator.</param>
/// <returns><c>true</c> if <c>lhs</c> is not equal
/// to <c>rhs</c>.</returns>
public static bool operator!=(SignatureString lhs, SignatureString rhs) => !(lhs == rhs);
}
/// <summary>
/// Representation for Unix file descriptor.
/// <para>Since EFL 1.23.</para>
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct UnixFd : IEquatable<UnixFd>
{
/// <summary>
/// The value of the file descriptor.
/// <para>Since EFL 1.23.</para>
/// </summary>
public Int32 value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="fd">The file descriptor.</param>
public UnixFd(Int32 fd)
{
value = fd;
}
/// <summary>
/// Conversion operator of UnixFd from Int32.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="fd">The file descriptor.</param>
public static implicit operator UnixFd(Int32 fd) => FromInt32(fd);
/// <summary>
/// Converts a <see cref="Int32" /> to a <see cref="UnixFd" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="fd">The file descriptor.</param>
public static UnixFd FromInt32(Int32 fd) => new UnixFd(fd);
/// <summary>
/// Conversion operator of Int32 from UnixFd.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="unix_fd">The UnixFd to be converted.</param>
public static implicit operator Int32(UnixFd unix_fd) => ToInt32(unix_fd);
/// <summary>
/// Converts a <see cref="UnixFd" /> to a <see cref="Int32" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="unix_fd">The <see cref="UnixFd" /> to be converted.</param>
public static Int32 ToInt32(UnixFd unix_fd) => unix_fd.value;
/// <summary>
/// Gets a hash for <see cref="UnixFd" />.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <returns>A hash code.</returns>
public override int GetHashCode() => value.GetHashCode();
/// <summary>Returns whether this <see cref="UnixFd" />
/// is equal to the given <see cref="object" />.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="other">The <see cref="object" /> to be compared to.</param>
/// <returns><c>true</c> if is equal to <c>other</c>.</returns>
public override bool Equals(object other)
=> (!(other is UnixFd)) ? false : Equals((UnixFd)other);
/// <summary>Returns whether this <see cref="UnixFd" /> is equal
/// to the given <see cref="UnixFd" />.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="other">The <see cref="UnixFd" /> to be compared to.</param>
/// <returns><c>true</c> if is equal to <c>other</c>.</returns>
public bool Equals(UnixFd other) => value == other.value;
/// <summary>Returns whether <c>lhs</c> is equal to <c>rhs</c>.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="lhs">The left hand side of the operator.</param>
/// <param name="rhs">The right hand side of the operator.</param>
/// <returns><c>true</c> if <c>lhs</c> is equal
/// to <c>rhs</c>.</returns>
public static bool operator==(UnixFd lhs, UnixFd rhs) => lhs.Equals(rhs);
/// <summary>Returns whether <c>lhs</c> is not equal to <c>rhs</c>.
/// <para>Since EFL 1.24.</para>
/// </summary>
/// <param name="lhs">The left hand side of the operator.</param>
/// <param name="rhs">The right hand side of the operator.</param>
/// <returns><c>true</c> if <c>lhs</c> is not equal
/// to <c>rhs</c>.</returns>
public static bool operator!=(UnixFd lhs, UnixFd rhs) => !(lhs == rhs);
}
/// <summary>
/// Arguments of EldBus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public static class Argument
{
/// <summary>
/// The type of a byte.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class ByteType
{
/// <summary>
/// The code of the byte.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'y';
/// <summary>
/// The signature of the byte.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "y";
}
/// <summary>
/// The type of a boolean
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class BooleanType
{
/// <summary>
/// The code of the boolean.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'b';
/// <summary>
/// The signature of the boolean.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "b";
}
/// <summary>
/// The type of a Int16.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class Int16Type
{
/// <summary>
/// The code of the Int16.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'n';
/// <summary>
/// The signature of the Int16.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "n";
}
/// <summary>
/// The type of an unsigned Int16.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class UInt16Type
{
/// <summary>
/// The code of the unsigned Int16.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'q';
/// <summary>
/// The signature of the unsigned Int16.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "q";
}
/// <summary>
/// The type of a Int32.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class Int32Type
{
/// <summary>
/// The code of the Int32.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'i';
/// <summary>
/// The signature of the Int32.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "i";
}
/// <summary>
/// The type of an unsigned Int32.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class UInt32Type
{
/// <summary>
/// The code of the unsigned Int32.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'u';
/// <summary>
/// The signature of the unsigned Int32.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "u";
}
/// <summary>
/// The type of a Int64.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class Int64Type
{
/// <summary>
/// The code of the Int64.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'x';
/// <summary>
/// The signature of the Int64.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "x";
}
/// <summary>
/// The type of an unsigned Int64.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class UInt64Type
{
/// <summary>
/// The code of the unsigned Int64.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 't';
/// <summary>
/// The signature of the unsigned Int64.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "t";
}
/// <summary>
/// The type of the double.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class DoubleType
{
/// <summary>
/// The code of the double.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'd';
/// <summary>
/// The signature of the double.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "d";
}
/// <summary>
/// The type of a string.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class StringType
{
/// <summary>
/// The code of the string.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 's';
/// <summary>
/// The signature of the string.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "s";
}
/// <summary>
/// The type of an object path.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class ObjectPathType
{
/// <summary>
/// The code of the object path.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'o';
/// <summary>
/// The signature of the object path.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "o";
}
/// <summary>
/// The type of a signature.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class SignatureType
{
/// <summary>
/// The code of the signature.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'g';
/// <summary>
/// The signature of the signature.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "g";
}
/// <summary>
/// The type of a array.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class ArrayType
{
/// <summary>
/// The code of the array.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'a';
/// <summary>
/// The signature of the array.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "a";
}
/// <summary>
/// The type of a struct.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class StructType
{
/// <summary>
/// The code of the struct.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'r';
/// <summary>
/// The signature of the struct.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "r";
}
/// <summary>
/// The type of a variant.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class VariantType
{
/// <summary>
/// The code of the variant.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'v';
/// <summary>
/// The signature of the variant.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "v";
}
/// <summary>
/// The type of a dictionary.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class DictEntryType
{
/// <summary>
/// The code of the dictionary.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'e';
/// <summary>
/// The signature of the dictionary.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "e";
}
/// <summary>
/// The type of an unix file descriptor.
/// <para>Since EFL 1.23.</para>
/// </summary>
internal static class UnixFdType
{
/// <summary>
/// The code of unix fd.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const char Code = 'h';
/// <summary>
/// The signature of the unix fd.
/// <para>Since EFL 1.23.</para>
/// </summary>
public const string Signature = "h";
}
// public static readonly ByteType ByteT = new ByteType();
// public static readonly BooleanType BooleanT = new BooleanType();
// public static readonly Int16Type Int16T = new Int16Type();
// public static readonly UInt16Type UInt16T = new UInt16Type();
// public static readonly Int32Type Int32T = new Int32Type();
// public static readonly UInt32Type UInt32T = new UInt32Type();
// public static readonly Int64Type Int64T = new Int64Type();
// public static readonly UInt64Type UInt64T = new UInt64Type();
// public static readonly DoubleType DoubleT = new DoubleType();
// public static readonly StringType StringT = new StringType();
// public static readonly ObjectPathType ObjectPathT = new ObjectPathType();
// public static readonly SignatureType SignatureT = new SignatureType();
// public static readonly ArrayType ArrayT = new ArrayType();
// public static readonly StructType StructT = new StructType();
// public static readonly VariantType VariantT = new VariantType();
// public static readonly DictEntryType DictEntryT = new DictEntryType();
// public static readonly UnixFdType UnixFdT = new UnixFdType();
//
// public static readonly ByteType y = ByteT;
// public static readonly BooleanType b = BooleanT;
// public static readonly Int16Type n = Int16T;
// public static readonly UInt16Type q = UInt16T;
// public static readonly Int32Type i = Int32T;
// public static readonly UInt32Type u = UInt32T;
// public static readonly Int64Type x = Int64T;
// public static readonly UInt64Type t = UInt64T;
// public static readonly DoubleType d = DoubleT;
// public static readonly StringType s = StringT;
// public static readonly ObjectPathType o = ObjectPathT;
// public static readonly SignatureType g = SignatureT;
// public static readonly ArrayType a = ArrayT;
// public static readonly StructType r = StructT;
// public static readonly VariantType v = VariantT;
// public static readonly DictEntryType e = DictEntryT;
// public static readonly UnixFdType h = UnixFdT;
}
/// <summary>
/// Arguments to a basic message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public abstract class BasicMessageArgument
{
/// <summary>
/// Appends a message to eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="msg">The message to be appended.</param>
public void AppendTo(eldbus.Message msg)
{
if (!InternalAppendTo(msg))
{
throw new SEHException("Eldbus: could not append basic type to eldbus.Message");
}
}
/// <summary>
/// Appends a message to eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="iter">The messages to append.</param>
public void AppendTo(eldbus.MessageIterator iter)
{
if (!InternalAppendTo(iter))
{
throw new SEHException("Eldbus: could not append basic type to eldbus.MessageIterator");
}
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public abstract char TypeCode {get;}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public abstract string Signature {get;}
[EditorBrowsable(EditorBrowsableState.Never)]
protected abstract bool InternalAppendTo(eldbus.Message msg);
[EditorBrowsable(EditorBrowsableState.Never)]
protected abstract bool InternalAppendTo(eldbus.MessageIterator iter);
/// <summary>
/// Conversion operator of BasicMessageArgument from byte.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The byte to be converted.</param>
public static implicit operator BasicMessageArgument(byte arg)
=> FromByte(arg);
/// <summary>
/// Converts a <see cref="byte" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="byte" /> to be converted.</param>
public static BasicMessageArgument FromByte(byte arg)
=> new ByteMessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from bool.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The bool to be converted.</param>
public static implicit operator BasicMessageArgument(bool arg)
=> FromBoolean(arg);
/// <summary>
/// Converts a <see cref="bool" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="bool" /> to be converted.</param>
public static BasicMessageArgument FromBoolean(bool arg)
=> new BoolMessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from Int16.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The int16 to be converted.</param>
public static implicit operator BasicMessageArgument(Int16 arg)
=> FromInt16(arg);
/// <summary>
/// Converts a <see cref="Int16" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="Int16" /> to be converted.</param>
public static BasicMessageArgument FromInt16(Int16 arg)
=> new Int16MessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from unsigned int16.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The unsigned int16 to be converted.</param>
public static implicit operator BasicMessageArgument(UInt16 arg)
=> FromUInt16(arg);
/// <summary>
/// Converts a <see cref="UInt16" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="UInt16" /> to be converted.</param>
public static BasicMessageArgument FromUInt16(UInt16 arg)
=> new UInt16MessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from int32.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The int32 to be converted.</param>
public static implicit operator BasicMessageArgument(Int32 arg)
=> FromInt32(arg);
/// <summary>
/// Converts a <see cref="Int32" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="Int32" /> to be converted.</param>
public static BasicMessageArgument FromInt32(Int32 arg)
=> new Int32MessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from unsigned int32.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The unsigned int32 to be converted.</param>
public static implicit operator BasicMessageArgument(UInt32 arg)
=> FromUInt32(arg);
/// <summary>
/// Converts a <see cref="UInt32" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="UInt32" /> to be converted.</param>
public static BasicMessageArgument FromUInt32(UInt32 arg)
=> new UInt32MessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from int64.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The int64 to be converted.</param>
public static implicit operator BasicMessageArgument(Int64 arg)
=> FromInt64(arg);
/// <summary>
/// Converts a <see cref="Int64" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="Int64" /> to be converted.</param>
public static BasicMessageArgument FromInt64(Int64 arg)
=> new Int64MessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from unsigned int64.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The unsigned int64 to be converted.</param>
public static implicit operator BasicMessageArgument(UInt64 arg)
=> FromUInt64(arg);
/// <summary>
/// Converts a <see cref="UInt64" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="UInt64" /> to be converted.</param>
public static BasicMessageArgument FromUInt64(UInt64 arg)
=> new UInt64MessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from string.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">the string to be converted.</param>
public static implicit operator BasicMessageArgument(string arg)
=> FromString(arg);
/// <summary>
/// Converts a <see cref="string" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="string" /> to be converted.</param>
public static BasicMessageArgument FromString(string arg)
=> new StringMessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from signature.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The signature to be converted.</param>
public static implicit operator BasicMessageArgument(SignatureString arg)
=> FromSignatureString(arg);
/// <summary>
/// Converts a <see cref="SignatureString" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="SignatureString" /> to be converted.</param>
public static BasicMessageArgument FromSignatureString(SignatureString arg)
=> new SignatureMessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from object path.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The object path to be converted.</param>
public static implicit operator BasicMessageArgument(ObjectPath arg)
=> FromObjectPath(arg);
/// <summary>
/// Converts a <see cref="ObjectPath" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="ObjectPath" /> to be converted.</param>
public static BasicMessageArgument FromObjectPath(ObjectPath arg)
=> new ObjectPathMessageArgument(arg);
/// <summary>
/// Conversion operator of BasicMessageArgument from unix fd.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The unix fd to be converted.</param>
public static implicit operator BasicMessageArgument(UnixFd arg)
=> FromUnixFd(arg);
/// <summary>
/// Converts a <see cref="UnixFd" /> to a <see cref="BasicMessageArgument" />.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The <see cref="UnixFd" /> to be converted.</param>
public static BasicMessageArgument FromUnixFd(UnixFd arg)
=> new UnixFdMessageArgument(arg);
}
/// <summary>
/// Arguments to a byte message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class ByteMessageArgument : BasicMessageArgument
{
private byte value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The argument of the eldbus.</param>
public ByteMessageArgument(byte arg)
{
value = arg;
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.ByteType.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Arguments to a bool message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class BoolMessageArgument : BasicMessageArgument
{
private Int32 value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the eldbus.</param>
public BoolMessageArgument(bool arg)
{
value = Convert.ToInt32(arg);
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.BooleanType.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Arguments to an int16 message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class Int16MessageArgument : BasicMessageArgument
{
private Int16 value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the eldbus.</param>
public Int16MessageArgument(Int16 arg)
{
value = arg;
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.Int16Type.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Arguments to an unsigned int16 message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class UInt16MessageArgument : BasicMessageArgument
{
private UInt16 value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">the arguments of the eldbus.</param>
public UInt16MessageArgument(UInt16 arg)
{
value = arg;
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.UInt16Type.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Arguments to an int32 message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class Int32MessageArgument : BasicMessageArgument
{
private Int32 value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the eldbus.</param>
public Int32MessageArgument(Int32 arg)
{
value = arg;
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.Int32Type.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Arguments to an unsigned int32 message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class UInt32MessageArgument : BasicMessageArgument
{
private UInt32 value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the unsigned type.</param>
public UInt32MessageArgument(UInt32 arg)
{
value = arg;
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.UInt32Type.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Arguments to an int64 message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class Int64MessageArgument : BasicMessageArgument
{
private Int64 value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the eldbus.</param>
public Int64MessageArgument(Int64 arg)
{
value = arg;
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.Int64Type.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Arguments to an unsigned int64 message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class UInt64MessageArgument : BasicMessageArgument
{
private UInt64 value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the eldbus.</param>
public UInt64MessageArgument(UInt64 arg)
{
value = arg;
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.UInt64Type.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Arguments to a double message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class DoubleMessageArgument : BasicMessageArgument
{
private double value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the eldbus.</param>
public DoubleMessageArgument(double arg)
{
value = arg;
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.DoubleType.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Arguments to a string like message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public abstract class StringLikeMessageArgument : BasicMessageArgument
{
private string value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the eldbus.</param>
public StringLikeMessageArgument(string arg)
{
value = arg;
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Arguments to a string message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class StringMessageArgument : StringLikeMessageArgument
{
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the eldbus.</param>
public StringMessageArgument(string arg) : base(arg)
{
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.StringType.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
}
/// <summary>
/// Arguments to an object path message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class ObjectPathMessageArgument : StringLikeMessageArgument
{
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg"></param>
public ObjectPathMessageArgument(ObjectPath arg) : base(arg.value)
{
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.ObjectPathType.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
}
/// <summary>
/// Arguments to a signature message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class SignatureMessageArgument : StringLikeMessageArgument
{
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the eldbus.</param>
public SignatureMessageArgument(SignatureString arg) : base(arg.value)
{
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.SignatureType.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
}
/// <summary>
/// Arguments to an unixfd message eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public class UnixFdMessageArgument : BasicMessageArgument
{
private Int32 value;
/// <summary>
/// Constructor.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="arg">The arguments of the eldbus.</param>
public UnixFdMessageArgument(UnixFd arg)
{
value = arg.value;
}
/// <summary>
/// The code of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override char TypeCode
{
get { return Argument.UnixFdType.Code; }
}
/// <summary>
/// The signature of the type.
/// <para>Since EFL 1.23.</para>
/// </summary>
public override string Signature
{
get { return Argument.ByteType.Signature; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
[EditorBrowsable(EditorBrowsableState.Never)]
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
/// <summary>
/// Function type to delegate a message.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="msg">The message.</param>
/// <param name="pending"></param>
public delegate void MessageDelegate(eldbus.Message msg, eldbus.Pending pending);
/// <summary>
/// Commons for eldbus.
/// <para>Since EFL 1.23.</para>
/// </summary>
public static class Common
{
/// <summary>
/// Register the NullError.
/// <para>Since EFL 1.23.</para>
/// </summary>
public static void RaiseNullHandle()
{
if (NullHandleError == 0)
{
csharp: Change to new class API. Summary: As discussed in T7204: - Eo Interfaces/mixins -> C# Interfaces with concrete class implementations - Eo Regular/Abstracts -> Proper C# classes - Added some new generators and helper methods. - Refactored the class generator, splitting into helper methods Eo handles now are stored only in the "root" class in any given inheritance tree (generally, Efl.Object), and accessible to each child. Methods also are defined in a single place instead of repeatedly generated in everyfile, reducing the size of the generated .dll from 30MB to around 4.5MB. Mixins are generated as C# interfaces but any regular class it inherits from is lost, as we can't have interfaces inheriting from regular classes. This will be dealt with in a later commit. Summary of API Changes: - Merged Inherit/Concrete classes. (These suffixes disappear from regular classes). - Interface still have implementations with 'Concrete' suffix for when they are returned from methods. - Removed 'I' from interface names. - Removed interfaces for regular/abstract Eo classes. - Concrete classes for interfaces/mixins hold the event argument struct. - Removed '_' from classes, enums, structs, etc, as indicated in C# naming conventions. - Namespaces are now Camel.Cased. - Renamed IWrapper's raw_handle/raw_klass to NativeHandle/NativeClass Also renamed the test classes as after the namespace change, the test namespace Test can conflict with the helper Test namespace. (And use more meaningful names than Test.Testing...) Also Fixes T7336 by removing a deprecated example and adding efl_loop_timer_example to build system. Fixes T7451 by hiding the class_get DllImports and renaming the IWrapper fields. The native handlers are used in the manual binding. Still need to work: - As there are still some events names clashing (e.g. Efl.Ui.Bg with "resize" from Efl.Gfx.Entity and Efl.Gfx.Image), Events are currently declared on the interface and implemented "namespaced" in the classes, requiring the cast to the interface to access the event. - The Mixin Conundrum. Mixin inheritance will be dealt in a future commit. Depends on D7260 Reviewers: segfaultxavi, vitor.sousa, felipealmeida, Jaehyun_Cho Reviewed By: vitor.sousa Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T7451, T7336 Differential Revision: https://phab.enlightenment.org/D7262
2018-11-29 15:04:37 -08:00
NullHandleError = Eina.Error.Register("Eldbus: null handle");
}
csharp: Change to new class API. Summary: As discussed in T7204: - Eo Interfaces/mixins -> C# Interfaces with concrete class implementations - Eo Regular/Abstracts -> Proper C# classes - Added some new generators and helper methods. - Refactored the class generator, splitting into helper methods Eo handles now are stored only in the "root" class in any given inheritance tree (generally, Efl.Object), and accessible to each child. Methods also are defined in a single place instead of repeatedly generated in everyfile, reducing the size of the generated .dll from 30MB to around 4.5MB. Mixins are generated as C# interfaces but any regular class it inherits from is lost, as we can't have interfaces inheriting from regular classes. This will be dealt with in a later commit. Summary of API Changes: - Merged Inherit/Concrete classes. (These suffixes disappear from regular classes). - Interface still have implementations with 'Concrete' suffix for when they are returned from methods. - Removed 'I' from interface names. - Removed interfaces for regular/abstract Eo classes. - Concrete classes for interfaces/mixins hold the event argument struct. - Removed '_' from classes, enums, structs, etc, as indicated in C# naming conventions. - Namespaces are now Camel.Cased. - Renamed IWrapper's raw_handle/raw_klass to NativeHandle/NativeClass Also renamed the test classes as after the namespace change, the test namespace Test can conflict with the helper Test namespace. (And use more meaningful names than Test.Testing...) Also Fixes T7336 by removing a deprecated example and adding efl_loop_timer_example to build system. Fixes T7451 by hiding the class_get DllImports and renaming the IWrapper fields. The native handlers are used in the manual binding. Still need to work: - As there are still some events names clashing (e.g. Efl.Ui.Bg with "resize" from Efl.Gfx.Entity and Efl.Gfx.Image), Events are currently declared on the interface and implemented "namespaced" in the classes, requiring the cast to the interface to access the event. - The Mixin Conundrum. Mixin inheritance will be dealt in a future commit. Depends on D7260 Reviewers: segfaultxavi, vitor.sousa, felipealmeida, Jaehyun_Cho Reviewed By: vitor.sousa Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T7451, T7336 Differential Revision: https://phab.enlightenment.org/D7262
2018-11-29 15:04:37 -08:00
Eina.Error.Raise(NullHandleError);
}
/// <summary>
/// Instance for a EldBus_Message_Cb.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="data">The data to the eldbus.</param>
/// <param name="msg">The message to eldbus.</param>
/// <param name="pending"></param>
public delegate void Eldbus_Message_Cb(IntPtr data, IntPtr msg, IntPtr pending);
/// <summary>
/// Get a wrapper for the message instance.
/// <para>Since EFL 1.23.</para>
/// </summary>
public static IntPtr GetMessageCbWrapperPtr()
{
return Marshal.GetFunctionPointerForDelegate(GetMessageCbWrapper());
}
/// <summary>
/// Gets the message wrapper.
/// <para>Since EFL 1.23.</para>
/// </summary>
public static Eldbus_Message_Cb GetMessageCbWrapper()
{
if (message_cb_wrapper == null)
{
message_cb_wrapper = new Eldbus_Message_Cb(MessageCbWrapper);
}
return message_cb_wrapper;
}
/// <summary>
/// Wraps the data to a message.
/// <para>Since EFL 1.23.</para>
/// </summary>
/// <param name="data"></param>
/// <param name="msg_hdl"></param>
/// <param name="pending_hdl"></param>
public static void MessageCbWrapper(IntPtr data, IntPtr msg_hdl, IntPtr pending_hdl)
{
MessageDelegate dlgt = Marshal.GetDelegateForFunctionPointer(data, typeof(MessageDelegate)) as MessageDelegate;
if (dlgt == null)
{
csharp: Change to new class API. Summary: As discussed in T7204: - Eo Interfaces/mixins -> C# Interfaces with concrete class implementations - Eo Regular/Abstracts -> Proper C# classes - Added some new generators and helper methods. - Refactored the class generator, splitting into helper methods Eo handles now are stored only in the "root" class in any given inheritance tree (generally, Efl.Object), and accessible to each child. Methods also are defined in a single place instead of repeatedly generated in everyfile, reducing the size of the generated .dll from 30MB to around 4.5MB. Mixins are generated as C# interfaces but any regular class it inherits from is lost, as we can't have interfaces inheriting from regular classes. This will be dealt with in a later commit. Summary of API Changes: - Merged Inherit/Concrete classes. (These suffixes disappear from regular classes). - Interface still have implementations with 'Concrete' suffix for when they are returned from methods. - Removed 'I' from interface names. - Removed interfaces for regular/abstract Eo classes. - Concrete classes for interfaces/mixins hold the event argument struct. - Removed '_' from classes, enums, structs, etc, as indicated in C# naming conventions. - Namespaces are now Camel.Cased. - Renamed IWrapper's raw_handle/raw_klass to NativeHandle/NativeClass Also renamed the test classes as after the namespace change, the test namespace Test can conflict with the helper Test namespace. (And use more meaningful names than Test.Testing...) Also Fixes T7336 by removing a deprecated example and adding efl_loop_timer_example to build system. Fixes T7451 by hiding the class_get DllImports and renaming the IWrapper fields. The native handlers are used in the manual binding. Still need to work: - As there are still some events names clashing (e.g. Efl.Ui.Bg with "resize" from Efl.Gfx.Entity and Efl.Gfx.Image), Events are currently declared on the interface and implemented "namespaced" in the classes, requiring the cast to the interface to access the event. - The Mixin Conundrum. Mixin inheritance will be dealt in a future commit. Depends on D7260 Reviewers: segfaultxavi, vitor.sousa, felipealmeida, Jaehyun_Cho Reviewed By: vitor.sousa Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T7451, T7336 Differential Revision: https://phab.enlightenment.org/D7262
2018-11-29 15:04:37 -08:00
Eina.Log.Error("Eldbus: invalid delegate pointer from Eldbus_Message_Cb");
return;
}
eldbus.Message msg = null;
eldbus.Pending pending = null;
try
{
msg = new eldbus.Message(msg_hdl, false);
pending = new eldbus.Pending(pending_hdl, false);
}
catch (Exception e)
{
csharp: Change to new class API. Summary: As discussed in T7204: - Eo Interfaces/mixins -> C# Interfaces with concrete class implementations - Eo Regular/Abstracts -> Proper C# classes - Added some new generators and helper methods. - Refactored the class generator, splitting into helper methods Eo handles now are stored only in the "root" class in any given inheritance tree (generally, Efl.Object), and accessible to each child. Methods also are defined in a single place instead of repeatedly generated in everyfile, reducing the size of the generated .dll from 30MB to around 4.5MB. Mixins are generated as C# interfaces but any regular class it inherits from is lost, as we can't have interfaces inheriting from regular classes. This will be dealt with in a later commit. Summary of API Changes: - Merged Inherit/Concrete classes. (These suffixes disappear from regular classes). - Interface still have implementations with 'Concrete' suffix for when they are returned from methods. - Removed 'I' from interface names. - Removed interfaces for regular/abstract Eo classes. - Concrete classes for interfaces/mixins hold the event argument struct. - Removed '_' from classes, enums, structs, etc, as indicated in C# naming conventions. - Namespaces are now Camel.Cased. - Renamed IWrapper's raw_handle/raw_klass to NativeHandle/NativeClass Also renamed the test classes as after the namespace change, the test namespace Test can conflict with the helper Test namespace. (And use more meaningful names than Test.Testing...) Also Fixes T7336 by removing a deprecated example and adding efl_loop_timer_example to build system. Fixes T7451 by hiding the class_get DllImports and renaming the IWrapper fields. The native handlers are used in the manual binding. Still need to work: - As there are still some events names clashing (e.g. Efl.Ui.Bg with "resize" from Efl.Gfx.Entity and Efl.Gfx.Image), Events are currently declared on the interface and implemented "namespaced" in the classes, requiring the cast to the interface to access the event. - The Mixin Conundrum. Mixin inheritance will be dealt in a future commit. Depends on D7260 Reviewers: segfaultxavi, vitor.sousa, felipealmeida, Jaehyun_Cho Reviewed By: vitor.sousa Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T7451, T7336 Differential Revision: https://phab.enlightenment.org/D7262
2018-11-29 15:04:37 -08:00
Eina.Log.Error("Eldbus: could not convert Eldbus_Message_Cb parameters. Exception: " + e.ToString());
if (msg != null)
{
msg.Dispose(); // CA2000
}
return;
}
try
{
dlgt(msg, pending);
}
catch (Exception e)
{
csharp: Change to new class API. Summary: As discussed in T7204: - Eo Interfaces/mixins -> C# Interfaces with concrete class implementations - Eo Regular/Abstracts -> Proper C# classes - Added some new generators and helper methods. - Refactored the class generator, splitting into helper methods Eo handles now are stored only in the "root" class in any given inheritance tree (generally, Efl.Object), and accessible to each child. Methods also are defined in a single place instead of repeatedly generated in everyfile, reducing the size of the generated .dll from 30MB to around 4.5MB. Mixins are generated as C# interfaces but any regular class it inherits from is lost, as we can't have interfaces inheriting from regular classes. This will be dealt with in a later commit. Summary of API Changes: - Merged Inherit/Concrete classes. (These suffixes disappear from regular classes). - Interface still have implementations with 'Concrete' suffix for when they are returned from methods. - Removed 'I' from interface names. - Removed interfaces for regular/abstract Eo classes. - Concrete classes for interfaces/mixins hold the event argument struct. - Removed '_' from classes, enums, structs, etc, as indicated in C# naming conventions. - Namespaces are now Camel.Cased. - Renamed IWrapper's raw_handle/raw_klass to NativeHandle/NativeClass Also renamed the test classes as after the namespace change, the test namespace Test can conflict with the helper Test namespace. (And use more meaningful names than Test.Testing...) Also Fixes T7336 by removing a deprecated example and adding efl_loop_timer_example to build system. Fixes T7451 by hiding the class_get DllImports and renaming the IWrapper fields. The native handlers are used in the manual binding. Still need to work: - As there are still some events names clashing (e.g. Efl.Ui.Bg with "resize" from Efl.Gfx.Entity and Efl.Gfx.Image), Events are currently declared on the interface and implemented "namespaced" in the classes, requiring the cast to the interface to access the event. - The Mixin Conundrum. Mixin inheritance will be dealt in a future commit. Depends on D7260 Reviewers: segfaultxavi, vitor.sousa, felipealmeida, Jaehyun_Cho Reviewed By: vitor.sousa Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T7451, T7336 Differential Revision: https://phab.enlightenment.org/D7262
2018-11-29 15:04:37 -08:00
Eina.Log.Error("Eldbus: Eldbus_Message_Cb delegate error. Exception: " + e.ToString());
}
finally
{
msg.Dispose(); // CA2000
}
}
private static Eldbus_Message_Cb message_cb_wrapper = null;
csharp: Change to new class API. Summary: As discussed in T7204: - Eo Interfaces/mixins -> C# Interfaces with concrete class implementations - Eo Regular/Abstracts -> Proper C# classes - Added some new generators and helper methods. - Refactored the class generator, splitting into helper methods Eo handles now are stored only in the "root" class in any given inheritance tree (generally, Efl.Object), and accessible to each child. Methods also are defined in a single place instead of repeatedly generated in everyfile, reducing the size of the generated .dll from 30MB to around 4.5MB. Mixins are generated as C# interfaces but any regular class it inherits from is lost, as we can't have interfaces inheriting from regular classes. This will be dealt with in a later commit. Summary of API Changes: - Merged Inherit/Concrete classes. (These suffixes disappear from regular classes). - Interface still have implementations with 'Concrete' suffix for when they are returned from methods. - Removed 'I' from interface names. - Removed interfaces for regular/abstract Eo classes. - Concrete classes for interfaces/mixins hold the event argument struct. - Removed '_' from classes, enums, structs, etc, as indicated in C# naming conventions. - Namespaces are now Camel.Cased. - Renamed IWrapper's raw_handle/raw_klass to NativeHandle/NativeClass Also renamed the test classes as after the namespace change, the test namespace Test can conflict with the helper Test namespace. (And use more meaningful names than Test.Testing...) Also Fixes T7336 by removing a deprecated example and adding efl_loop_timer_example to build system. Fixes T7451 by hiding the class_get DllImports and renaming the IWrapper fields. The native handlers are used in the manual binding. Still need to work: - As there are still some events names clashing (e.g. Efl.Ui.Bg with "resize" from Efl.Gfx.Entity and Efl.Gfx.Image), Events are currently declared on the interface and implemented "namespaced" in the classes, requiring the cast to the interface to access the event. - The Mixin Conundrum. Mixin inheritance will be dealt in a future commit. Depends on D7260 Reviewers: segfaultxavi, vitor.sousa, felipealmeida, Jaehyun_Cho Reviewed By: vitor.sousa Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T7451, T7336 Differential Revision: https://phab.enlightenment.org/D7262
2018-11-29 15:04:37 -08:00
private static Eina.Error NullHandleError = 0;
}
}