示例#1
0
            private void RegisterEventPrototype(Type eventType, string nativeBaseTypename)
            {
                const System.Reflection.BindingFlags flags = System.Reflection.BindingFlags.Instance |
                                                             System.Reflection.BindingFlags.NonPublic |
                                                             System.Reflection.BindingFlags.CreateInstance |
                                                             System.Reflection.BindingFlags.OptionalParamBinding;

                // manually construct native dist event to use as factory object
                var factoryObj = new DistEvent();
                var nativeRef  = factoryObj.GetNativeReference();

                // create managed implementation, supplying the dist event we just created
                var prototype = (Reference)Activator.CreateInstance(eventType, flags, null, new object[] { nativeRef }, null);

                // register a factory
                if (!RegisterEventHierarchy(eventType.Name, nativeBaseTypename, factoryObj))
                {
                    Message.Send(nameof(DistManager), MessageLevel.DEBUG, $"Using native factory    >>> {eventType.Name}");
                }
                else
                {
                    Message.Send(nameof(DistManager), MessageLevel.DEBUG, $"Using managed factory   >>> {eventType.Name}");
                }

                // use the overloaded AddFactory to register with correct typename
                AddFactory(prototype, eventType.Name);
            }
示例#2
0
            public bool SendEvent(DistEvent e, DistSession session)
            {
                if (UseAutoProperty && e.GetType().IsDefined(typeof(DistPropertyAutoStore), true))
                {
                    e.StorePropertiesAndFields();
                }

                return(DistClient_sendEvent(GetNativeReference(), e.GetNativeReference(), session.GetNativeReference()));
            }
示例#3
0
 public DistEventAttributeIterator(DistEvent e) : base(DistEventAttributeIterator_create(e.GetNativeReference()))
 {
 }
示例#4
0
 public bool SendEvent(DistEvent e, DistSession session)
 {
     return(DistClient_sendEvent(GetNativeReference(), e.GetNativeReference(), session.GetNativeReference()));
 }
示例#5
0
 public bool RegisterEventHierarchy(string typeName, string parentTypeName = "gzDistEvent", DistEvent factoryEvent = null)
 {
     return(DistManager_registerEventHierarchy(GetNativeReference(), typeName, parentTypeName, factoryEvent?.GetNativeReference() ?? IntPtr.Zero));
 }
示例#6
0
            public DistEvent AwaitResponse(DistEvent responseEventType, UInt32 timeout = 100)
            {
                DistEvent response = Reference.CreateObject(DistClient_awaitResponse(GetNativeReference(), responseEventType.GetNativeReference(), timeout)) as DistEvent;

                if (response?.IsValid() ?? false)
                {
                    if (UseAutoProperty && response.GetType().IsDefined(typeof(DistPropertyAutoRestore), true))
                    {
                        response.RestorePropertiesAndFields();
                    }
                }

                return(response);
            }