private void RecreateChannel(ulong id) { lock (@lock) { if (channels_list.ContainsKey(id)) { Net2Base instance = (channels_list[id] as INet2Handler).Instance; DeleteChannelsEvents(instance); if (instance is Net2Publisher) { (channels_list[id] as INet2Handler).ReleaseInstance(); (channels_list[id] as INet2Handler).SetInstance(publisher(instance.Name)); } else if (instance is Net2Subscriber) { (channels_list[id] as INet2Handler).ReleaseInstance(); (channels_list[id] as INet2Handler).SetInstance(subscriber(instance.Name)); } else if (instance is Net2Service) { (channels_list[id] as INet2Handler).ReleaseInstance(); (channels_list[id] as INet2Handler).SetInstance(service(instance.Name, (instance as Net2Service).ResponseCallback)); } else if (instance is Net2Client) { (channels_list[id] as INet2Handler).ReleaseInstance(); (channels_list[id] as INet2Handler).SetInstance(client(instance.Name)); } channels_list.Add(channels_list[id].Id, channels_list[id]); channels_list.Remove(id); } } }
void INet2Handler.SetInstance(Net2Base instance) { if (net2_instance != null) { throw new Exception("Handler allready has a channel instance!"); } net2_instance = instance; _AddInstance(); }
protected virtual void _ReleaseInstance() { if (net2_instance != null) { net2_instance.delegateNewLog -= Net2_instance_delegateNewLog; net2_instance.delegateStateChanged -= Net2_instance_delegateStateChanged; net2_instance.delegateReceiveChanged -= Net2_instance_delegateReceiveChanged; net2_instance.delegateSendChanged -= Net2_instance_delegateSendChanged; net2_instance.Dispose(); net2_instance = null; } }
private void ReleaseChannel(ulong id) { Net2Base instance = null; lock (@lock) { if (channels_list.ContainsKey(id)) { instance = (channels_list[id] as INet2Handler).Instance; net2_consul.removeService(instance.Name); channels_list.Remove(id); } } if (instance != null) { DeleteChannelsEvents(instance); } }
private void DeleteChannelsEvents(Net2Base instance) { if (instance == null) { return; } if (instance is Net2Publisher) { instance.delegateDisposing -= DisposingChannel; instance.delegateGetTime -= getTime; instance.delegateCrashed -= ChannelCrashed; instance.delegateNewLog -= delegateNewLog; } else if (instance is Net2Subscriber) { instance.delegateDisposing -= DisposingChannel; instance.delegateGetTime -= getTime; (instance as Net2Subscriber).delegateGetServiceInfo -= getService; instance.delegateCrashed -= ChannelCrashed; instance.delegateNewLog -= delegateNewLog; } else if (instance is Net2Service) { instance.delegateDisposing -= DisposingChannel; instance.delegateGetTime -= getTime; instance.delegateCrashed -= ChannelCrashed; instance.delegateNewLog -= delegateNewLog; } else if (instance is Net2Client) { instance.delegateDisposing -= DisposingChannel; instance.delegateGetTime -= getTime; (instance as Net2Client).delegateGetServiceInfo -= getService; instance.delegateCrashed -= ChannelCrashed; instance.delegateNewLog -= delegateNewLog; } }