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

564 lines
17 KiB
C#
Raw Normal View History

#pragma warning disable 1591
using System;
using System.Runtime.InteropServices;
using static eldbus.EldbusMessageNativeFunctions;
namespace eldbus {
public static class Timeout
{
public static int Infinite = 0x7fffffff;
}
[StructLayout(LayoutKind.Sequential)]
public struct ObjectPath
{
public string value;
public ObjectPath(string str)
{
value = str;
}
public static implicit operator ObjectPath(string str)
{
return new ObjectPath(str);
}
public static implicit operator string(ObjectPath path)
{
return path.value;
}
}
[StructLayout(LayoutKind.Sequential)]
public struct SignatureString
{
public string value;
public SignatureString(string str)
{
value = str;
}
public static implicit operator SignatureString(string str)
{
return new SignatureString(str);
}
public static implicit operator string(SignatureString sig)
{
return sig.value;
}
}
[StructLayout(LayoutKind.Sequential)]
public struct UnixFd
{
public Int32 value;
public UnixFd(Int32 fd)
{
value = fd;
}
public static implicit operator UnixFd(Int32 fd)
{
return new UnixFd(fd);
}
public static implicit operator Int32(UnixFd unix_fd)
{
return unix_fd.value;
}
}
public static class Argument
{
public class ByteType { public const char Code = 'y'; public const string Signature = "y"; }
public class BooleanType { public const char Code = 'b'; public const string Signature = "b"; }
public class Int16Type { public const char Code = 'n'; public const string Signature = "n"; }
public class UInt16Type { public const char Code = 'q'; public const string Signature = "q"; }
public class Int32Type { public const char Code = 'i'; public const string Signature = "i"; }
public class UInt32Type { public const char Code = 'u'; public const string Signature = "u"; }
public class Int64Type { public const char Code = 'x'; public const string Signature = "x"; }
public class UInt64Type { public const char Code = 't'; public const string Signature = "t"; }
public class DoubleType { public const char Code = 'd'; public const string Signature = "d"; }
public class StringType { public const char Code = 's'; public const string Signature = "s"; }
public class ObjectPathType { public const char Code = 'o'; public const string Signature = "o"; }
public class SignatureType { public const char Code = 'g'; public const string Signature = "g"; }
public class ArrayType { public const char Code = 'a'; public const string Signature = "a"; }
public class StructType { public const char Code = 'r'; public const string Signature = "r"; }
public class VariantType { public const char Code = 'v'; public const string Signature = "v"; }
public class DictEntryType { public const char Code = 'e'; public const string Signature = "e"; }
public class UnixFdType { public const char Code = 'h'; 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;
}
public abstract class BasicMessageArgument
{
public void AppendTo(eldbus.Message msg)
{
if (!InternalAppendTo(msg))
{
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.RaiseIfOccurred();
throw new SEHException("Eldbus: could not append basic type to eldbus.Message");
}
}
public void AppendTo(eldbus.MessageIterator iter)
{
if (!InternalAppendTo(iter))
{
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.RaiseIfOccurred();
throw new SEHException("Eldbus: could not append basic type to eldbus.MessageIterator");
}
}
public abstract char TypeCode {get;}
public abstract string Signature {get;}
protected abstract bool InternalAppendTo(eldbus.Message msg);
protected abstract bool InternalAppendTo(eldbus.MessageIterator iter);
public static implicit operator BasicMessageArgument(byte arg)
{
return new ByteMessageArgument(arg);
}
public static implicit operator BasicMessageArgument(bool arg)
{
return new BoolMessageArgument(arg);
}
public static implicit operator BasicMessageArgument(Int16 arg)
{
return new Int16MessageArgument(arg);
}
public static implicit operator BasicMessageArgument(UInt16 arg)
{
return new UInt16MessageArgument(arg);
}
public static implicit operator BasicMessageArgument(Int32 arg)
{
return new Int32MessageArgument(arg);
}
public static implicit operator BasicMessageArgument(UInt32 arg)
{
return new UInt32MessageArgument(arg);
}
public static implicit operator BasicMessageArgument(Int64 arg)
{
return new Int64MessageArgument(arg);
}
public static implicit operator BasicMessageArgument(UInt64 arg)
{
return new UInt64MessageArgument(arg);
}
public static implicit operator BasicMessageArgument(string arg)
{
return new StringMessageArgument(arg);
}
public static implicit operator BasicMessageArgument(SignatureString arg)
{
return new SignatureMessageArgument(arg);
}
public static implicit operator BasicMessageArgument(ObjectPath arg)
{
return new ObjectPathMessageArgument(arg);
}
public static implicit operator BasicMessageArgument(UnixFd arg)
{
return new UnixFdMessageArgument(arg);
}
}
public class ByteMessageArgument : BasicMessageArgument
{
private byte value;
public ByteMessageArgument(byte arg)
{
value = arg;
}
public override char TypeCode { get { return Argument.ByteType.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public class BoolMessageArgument : BasicMessageArgument
{
private Int32 value;
public BoolMessageArgument(bool arg)
{
value = Convert.ToInt32(arg);
}
public override char TypeCode { get { return Argument.BooleanType.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public class Int16MessageArgument : BasicMessageArgument
{
private Int16 value;
public Int16MessageArgument(Int16 arg)
{
value = arg;
}
public override char TypeCode { get { return Argument.Int16Type.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public class UInt16MessageArgument : BasicMessageArgument
{
private UInt16 value;
public UInt16MessageArgument(UInt16 arg)
{
value = arg;
}
public override char TypeCode { get { return Argument.UInt16Type.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public class Int32MessageArgument : BasicMessageArgument
{
private Int32 value;
public Int32MessageArgument(Int32 arg)
{
value = arg;
}
public override char TypeCode { get { return Argument.Int32Type.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public class UInt32MessageArgument : BasicMessageArgument
{
private UInt32 value;
public UInt32MessageArgument(UInt32 arg)
{
value = arg;
}
public override char TypeCode { get { return Argument.UInt32Type.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public class Int64MessageArgument : BasicMessageArgument
{
private Int64 value;
public Int64MessageArgument(Int64 arg)
{
value = arg;
}
public override char TypeCode { get { return Argument.Int64Type.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public class UInt64MessageArgument : BasicMessageArgument
{
private UInt64 value;
public UInt64MessageArgument(UInt64 arg)
{
value = arg;
}
public override char TypeCode { get { return Argument.UInt64Type.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public class DoubleMessageArgument : BasicMessageArgument
{
private double value;
public DoubleMessageArgument(double arg)
{
value = arg;
}
public override char TypeCode { get { return Argument.DoubleType.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public abstract class StringLikeMessageArgument : BasicMessageArgument
{
private string value;
public StringLikeMessageArgument(string arg)
{
value = arg;
}
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public class StringMessageArgument : StringLikeMessageArgument
{
public StringMessageArgument(string arg)
: base(arg)
{}
public override char TypeCode { get { return Argument.StringType.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
}
public class ObjectPathMessageArgument : StringLikeMessageArgument
{
public ObjectPathMessageArgument(ObjectPath arg)
: base(arg.value)
{}
public override char TypeCode { get { return Argument.ObjectPathType.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
}
public class SignatureMessageArgument : StringLikeMessageArgument
{
public SignatureMessageArgument(SignatureString arg)
: base(arg.value)
{}
public override char TypeCode { get { return Argument.SignatureType.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
}
public class UnixFdMessageArgument : BasicMessageArgument
{
private Int32 value;
public UnixFdMessageArgument(UnixFd arg)
{
value = arg.value;
}
public override char TypeCode { get { return Argument.UnixFdType.Code; } }
public override string Signature { get { return Argument.ByteType.Signature; } }
protected override bool InternalAppendTo(eldbus.Message msg)
{
return eldbus_message_arguments_append(msg.Handle, Signature, value);
}
protected override bool InternalAppendTo(eldbus.MessageIterator iter)
{
return eldbus_message_iter_basic_append(iter.Handle, TypeCode, value);
}
}
public delegate void MessageDelegate(eldbus.Message msg, eldbus.Pending pending);
public static class Common
{
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");
Eina.Error.Raise(NullHandleError);
}
public delegate void Eldbus_Message_Cb(IntPtr data, IntPtr msg, IntPtr pending);
public static IntPtr GetMessageCbWrapperPtr()
{
return Marshal.GetFunctionPointerForDelegate(GetMessageCbWrapper());
}
public static Eldbus_Message_Cb GetMessageCbWrapper()
{
if (message_cb_wrapper == null)
message_cb_wrapper = new Eldbus_Message_Cb(MessageCbWrapper);
return message_cb_wrapper;
}
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;
eldbus.Pending pending;
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());
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());
}
}
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;
}
}