public void BindToServiceType() { #region OnClientConnect Method OnClientConnectMethod = ServiceType.GetRuntimeMethods().FirstOrDefault(m => m.GetCustomAttribute(typeof(RPCOnClientConnectAttribute)) != null); if (OnClientConnectMethod != null) { Core.Log.LibDebug("Binding OnClientConnectMethod in the service {0}", Descriptor.Name); } #endregion #region Events if (Descriptor?.Events?.Any() != true) { return; } foreach (var evDesc in Descriptor.Events.Values) { if (evDesc.Event == null) { continue; } var eventAttribute = (RPCEventAttribute)ServiceInstance?.GetType().GetRuntimeEvent(evDesc.Name)?.GetCustomAttribute(typeof(RPCEventAttribute)) ?? new RPCEventAttribute(RPCMessageScope.Session); var evHandler = new EventHandler((s, e) => { if (_server.Transport == null) { return; } Guid clientId; lock (_threadClientId) _threadClientId.TryGetValue(Environment.CurrentManagedThreadId, out clientId); _server.Transport.FireEvent(eventAttribute, clientId, Descriptor.Name, evDesc.Event.Name, s, e); }); evDesc.Event.AddEventHandler(ServiceInstance, evHandler); ServiceEventHandlers[evDesc.Event] = evHandler; Core.Log.LibDebug("Binding Event: {0} on service {1}", evDesc.Name, Descriptor.Name); } #endregion }