Example #1
0
        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);
            }
        }
Example #2
0
 protected virtual void OnActorChannelConnected(object sender, ActorChannelConnectedEventArgs e)
 {
     if (Connected != null)
     {
         Connected(sender, new ActorConnectedEventArgs(e.ChannelIdentifier, e.RemoteActor));
     }
 }
Example #3
0
        protected override void OnActorChannelConnected(object sender, ActorChannelConnectedEventArgs e)
        {
            base.OnActorChannelConnected(sender, e);

            if (!e.RemoteActor.Equals(this.LocalActor))
            {
                NotifyActorChanged(e.RemoteActor);
            }
        }
Example #4
0
        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);
                }
            }
        }
Example #5
0
        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);
            }
        }