private void OnActorChannelConnected(object sender, ActorChannelConnectedEventArgs e) { var item = _channels.Get(e.ChannelIdentifier); if (item != null) { if (item.RemoteActorKey != e.RemoteActor.GetKey()) { _channels.Remove(e.ChannelIdentifier); CloseChannel(item.Channel); if (item.RemoteActor != null) { if (ChannelDisconnected != null) { ChannelDisconnected(sender, new ActorChannelDisconnectedEventArgs(item.ChannelIdentifier, item.RemoteActor)); } } } else { return; } } item = new ChannelItem(((IActorChannel)sender).Identifier, (IActorChannel)sender); item.RemoteActorKey = e.RemoteActor.GetKey(); item.RemoteActor = e.RemoteActor; _channels.TryAdd(item.ChannelIdentifier, item); if (ChannelConnected != null) { ChannelConnected(sender, e); } }
protected virtual void OnActorChannelConnected(object sender, ActorChannelConnectedEventArgs e) { if (Connected != null) { Connected(sender, new ActorConnectedEventArgs(e.ChannelIdentifier, e.RemoteActor)); } }
protected override void OnActorChannelConnected(object sender, ActorChannelConnectedEventArgs e) { base.OnActorChannelConnected(sender, e); if (!e.RemoteActor.Equals(this.LocalActor)) { NotifyActorChanged(e.RemoteActor); } }
private void OnSessionChannelConnected(object sender, ActorChannelConnectedEventArgs e) { var item = _sessions.Values.FirstOrDefault(s => s.Session.Identifier == e.ChannelIdentifier); if (item != null) { item.RemoteActorKey = e.RemoteActor.GetKey(); item.RemoteActor = e.RemoteActor; if (ChannelConnected != null) { ChannelConnected(sender, e); } } }
private bool ActivateChannel(IActorChannel channel) { channel.ChannelConnected += OnActorChannelConnected; channel.ChannelDisconnected += OnActorChannelDisconnected; channel.ChannelDataReceived += OnActorChannelDataReceived; ManualResetEventSlim waitingConnected = new ManualResetEventSlim(false); object connectedSender = null; ActorChannelConnectedEventArgs connectedEvent = null; EventHandler <ActorChannelConnectedEventArgs> onConnected = (s, e) => { connectedSender = s; connectedEvent = e; waitingConnected.Set(); }; channel.ChannelConnected += onConnected; channel.Open(); bool connected = waitingConnected.Wait(TimeSpan.FromSeconds(5)); channel.ChannelConnected -= onConnected; waitingConnected.Dispose(); if (connected && channel.Active) { var item = new ChannelItem(((IActorChannel)connectedSender).Identifier, (IActorChannel)connectedSender); item.RemoteActorKey = connectedEvent.RemoteActor.GetKey(); item.RemoteActor = connectedEvent.RemoteActor; _channels.TryAdd(channel.Identifier, item); return(true); } else { CloseChannel(channel); return(false); } }