public void BeginSend(ActorIdentity remoteActor, byte[] data, int offset, int count) { BeginSend(remoteActor.Type, remoteActor.Name, data, offset, count); }
public void BeginSend(ActorIdentity remoteActor, byte[] data) { BeginSend(remoteActor, data, 0, data.Length); }
private void Handshake(TimeSpan timeout) { var actorHandshakeRequestData = _channelConfiguration.FrameBuilder.ControlFrameDataEncoder.EncodeFrameData(_localActor); var actorHandshakeRequest = new HelloFrame(actorHandshakeRequestData); var actorHandshakeRequestBuffer = _channelConfiguration.FrameBuilder.EncodeFrame(actorHandshakeRequest); ManualResetEventSlim waitingHandshaked = new ManualResetEventSlim(false); ActorTransportDataReceivedEventArgs handshakeResponseEvent = null; EventHandler <ActorTransportDataReceivedEventArgs> onHandshaked = (s, e) => { handshakeResponseEvent = e; waitingHandshaked.Set(); }; _connector.DataReceived += onHandshaked; _log.InfoFormat("Handshake request from local actor [{0}].", _localActor); _connector.BeginSend(actorHandshakeRequestBuffer); bool handshaked = waitingHandshaked.Wait(timeout); _connector.DataReceived -= onHandshaked; waitingHandshaked.Dispose(); if (handshaked && handshakeResponseEvent != null) { ActorFrameHeader actorHandshakeResponseFrameHeader = null; bool isHeaderDecoded = _channelConfiguration.FrameBuilder.TryDecodeFrameHeader( handshakeResponseEvent.Data, handshakeResponseEvent.DataOffset, handshakeResponseEvent.DataLength, out actorHandshakeResponseFrameHeader); if (isHeaderDecoded && actorHandshakeResponseFrameHeader.OpCode == OpCode.Welcome) { byte[] payload; int payloadOffset; int payloadCount; _channelConfiguration.FrameBuilder.DecodePayload( handshakeResponseEvent.Data, handshakeResponseEvent.DataOffset, actorHandshakeResponseFrameHeader, out payload, out payloadOffset, out payloadCount); var actorHandshakeResponseData = _channelConfiguration.FrameBuilder.ControlFrameDataDecoder.DecodeFrameData <ActorIdentity>( payload, payloadOffset, payloadCount); _remoteActor = actorHandshakeResponseData; _log.InfoFormat("Handshake response from remote actor [{0}].", _remoteActor); } if (_remoteActor == null) { _log.ErrorFormat("Handshake with remote [{0}] failed, invalid actor description.", this.ConnectToEndPoint); Close(); } else { _log.InfoFormat("Handshake with remote [{0}] successfully, RemoteActor[{1}].", this.ConnectToEndPoint, _remoteActor); IsHandshaked = true; if (Connected != null) { Connected(this, new ActorConnectedEventArgs(this.ConnectToEndPoint.ToString(), _remoteActor)); } _connector.DataReceived += OnDataReceived; _keepAliveTracker.StartTimer(); } } else { _log.ErrorFormat("Handshake with remote [{0}] timeout [{1}].", this.ConnectToEndPoint, timeout); Close(); } }
public void Activate(ActorIdentity localActor) { this.Active = true; }
public ActorDataReceivedEventArgs(string sessionKey, ActorIdentity remoteActor, byte[] data) : this(sessionKey, remoteActor, data, 0, data.Length) { }