Exemplo n.º 1
0
 private void OnActorChannelDataReceived(object sender, ActorChannelDataReceivedEventArgs e)
 {
     if (ChannelDataReceived != null)
     {
         ChannelDataReceived(sender, e);
     }
 }
Exemplo n.º 2
0
 protected virtual void OnActorChannelDataReceived(object sender, ActorChannelDataReceivedEventArgs e)
 {
     if (DataReceived != null)
     {
         DataReceived(sender, new ActorDataReceivedEventArgs(e.ChannelIdentifier, e.RemoteActor, e.Data, e.DataOffset, e.DataLength));
     }
 }
Exemplo n.º 3
0
        private void OnCenterChannelDataReceived(object sender, ActorChannelDataReceivedEventArgs e)
        {
            ActorFrameHeader actorChangeNotificationFrameHeader = null;
            bool             isHeaderDecoded = this.ChannelConfiguration.FrameBuilder.TryDecodeFrameHeader(
                e.Data, e.DataOffset, e.DataLength,
                out actorChangeNotificationFrameHeader);

            if (isHeaderDecoded && actorChangeNotificationFrameHeader.OpCode == OpCode.Change)
            {
                byte[] payload;
                int    payloadOffset;
                int    payloadCount;
                this.ChannelConfiguration.FrameBuilder.DecodePayload(
                    e.Data, e.DataOffset, actorChangeNotificationFrameHeader,
                    out payload, out payloadOffset, out payloadCount);
                var actorChangeNotificationData = this.ChannelConfiguration.FrameBuilder.ControlFrameDataDecoder.DecodeFrameData <ActorIdentityCollection>(
                    payload, payloadOffset, payloadCount);

                var actors = actorChangeNotificationData != null ? actorChangeNotificationData.Items : null;
                if (actors != null && actors.Any())
                {
                    _log.DebugFormat("Actor changed, ActorType[{0}], AvailableCount[{1}].", actors.First().Type, actors.Count);
                    RaiseActorsChanged(actors);
                }
            }
        }
Exemplo n.º 4
0
        private IEnumerable <ActorIdentity> LookupRemoteActors(string actorType, Func <IEnumerable <ActorIdentity>, IEnumerable <ActorIdentity> > matchActorFunc)
        {
            var actorLookupCondition = new ActorIdentityLookup()
            {
                Type = actorType,
            };
            var actorLookupRequestData   = this.ChannelConfiguration.FrameBuilder.ControlFrameDataEncoder.EncodeFrameData(actorLookupCondition);
            var actorLookupRequest       = new WhereFrame(actorLookupRequestData);
            var actorLookupRequestBuffer = this.ChannelConfiguration.FrameBuilder.EncodeFrame(actorLookupRequest);

            ManualResetEventSlim waitingResponse = new ManualResetEventSlim(false);
            ActorChannelDataReceivedEventArgs lookupResponseEvent           = null;
            EventHandler <ActorChannelDataReceivedEventArgs> onDataReceived =
                (s, e) =>
            {
                lookupResponseEvent = e;
                waitingResponse.Set();
            };

            _centerChannel.ChannelDataReceived += onDataReceived;
            _centerChannel.BeginSend(_centerChannel.Identifier, actorLookupRequestBuffer);

            bool lookedup = waitingResponse.Wait(TimeSpan.FromSeconds(15));

            _centerChannel.ChannelDataReceived -= onDataReceived;
            waitingResponse.Dispose();

            if (lookedup && lookupResponseEvent != null)
            {
                ActorFrameHeader actorLookupResponseFrameHeader = null;
                bool             isHeaderDecoded = this.ChannelConfiguration.FrameBuilder.TryDecodeFrameHeader(
                    lookupResponseEvent.Data, lookupResponseEvent.DataOffset, lookupResponseEvent.DataLength,
                    out actorLookupResponseFrameHeader);
                if (isHeaderDecoded && actorLookupResponseFrameHeader.OpCode == OpCode.Here)
                {
                    byte[] payload;
                    int    payloadOffset;
                    int    payloadCount;
                    this.ChannelConfiguration.FrameBuilder.DecodePayload(
                        lookupResponseEvent.Data, lookupResponseEvent.DataOffset, actorLookupResponseFrameHeader,
                        out payload, out payloadOffset, out payloadCount);
                    var actorLookupResponseData = this.ChannelConfiguration.FrameBuilder.ControlFrameDataDecoder.DecodeFrameData <ActorIdentityCollection>(
                        payload, payloadOffset, payloadCount);

                    var actors = actorLookupResponseData != null ? actorLookupResponseData.Items : null;
                    if (actors != null)
                    {
                        _log.DebugFormat("Lookup actors, ActorType[{0}], Count[{1}].", actorType, actors.Count);
                        var matchedActors = matchActorFunc(actors);
                        if (matchedActors != null && matchedActors.Any())
                        {
                            _log.DebugFormat("Resolve actors, ActorType[{0}], Count[{1}].", actorType, matchedActors.Count());
                            return(matchedActors);
                        }
                    }
                }
            }

            return(null);
        }
Exemplo n.º 5
0
        protected override void OnActorChannelDataReceived(object sender, ActorChannelDataReceivedEventArgs e)
        {
            ActorFrameHeader actorLookupRequestFrameHeader = null;
            bool             isHeaderDecoded = this.ChannelConfiguration.FrameBuilder.TryDecodeFrameHeader(
                e.Data, e.DataOffset, e.DataLength,
                out actorLookupRequestFrameHeader);

            if (isHeaderDecoded && actorLookupRequestFrameHeader.OpCode == OpCode.Where)
            {
                byte[] payload;
                int    payloadOffset;
                int    payloadCount;
                this.ChannelConfiguration.FrameBuilder.DecodePayload(
                    e.Data, e.DataOffset, actorLookupRequestFrameHeader,
                    out payload, out payloadOffset, out payloadCount);
                var actorLookupRequestData = this.ChannelConfiguration
                                             .FrameBuilder
                                             .ControlFrameDataDecoder
                                             .DecodeFrameData <ActorIdentityLookup>(payload, payloadOffset, payloadCount);
                var lookupActorType = actorLookupRequestData != null ? actorLookupRequestData.Type : null;

                var actorCollection = new ActorIdentityCollection();
                actorCollection.Items.AddRange(this.GetAllActors().Where(a => a.Type == lookupActorType).ToList());
                var actorLookupResponseData  = this.ChannelConfiguration.FrameBuilder.ControlFrameDataEncoder.EncodeFrameData(actorCollection);
                var actorLookupResponse      = new HereFrame(actorLookupResponseData);
                var actorLookupRequestBuffer = this.ChannelConfiguration.FrameBuilder.EncodeFrame(actorLookupResponse);

                _log.DebugFormat("Lookup actors, ActorType[{0}], Count[{1}], RemoteActor[{2}].",
                                 lookupActorType, actorCollection.Items.Count, e.RemoteActor);
                this.Send(e.RemoteActor, actorLookupRequestBuffer);
            }
            else
            {
                base.OnActorChannelDataReceived(sender, e);
            }
        }