public void BeginSend(string identifier, byte[] data, int offset, int count) { if (this.Identifier != identifier) { throw new InvalidOperationException( string.Format("Channel identifier is not matched, Identifier[{0}].", identifier)); } _innerSession.BeginSend(data, offset, count); _keepAliveTracker.OnDataSent(); }
public void BeginSendTo(string sessionKey, byte[] data, int offset, int count) { if (!IsListening) { throw new InvalidOperationException("The server has stopped to listen."); } ActorTransportSession session = null; if (_sessions.TryGetValue(sessionKey, out session)) { session.BeginSend(data, offset, count); } else { _log.WarnFormat("BeginSendTo, cannot find target session [{0}].", sessionKey); } }
public IAsyncResult BeginSendTo(string sessionKey, byte[] data, int offset, int count, AsyncCallback callback, object state) { if (!IsListening) { throw new InvalidOperationException("The server has stopped to listen."); } ActorTransportSession session = null; if (_sessions.TryGetValue(sessionKey, out session)) { return(session.BeginSend(data, offset, count, callback, state)); } else { _log.WarnFormat("BeginSendTo, cannot find target session [{0}].", sessionKey); } return(null); }
public void OnDataReceived(byte[] data, int dataOffset, int dataLength) { if (!IsHandshaked) { Handshake(data, dataOffset, dataLength); } else { _keepAliveTracker.OnDataReceived(); ActorFrameHeader actorKeepAliveRequestFrameHeader = null; bool isHeaderDecoded = _channelConfiguration.FrameBuilder.TryDecodeFrameHeader( data, dataOffset, dataLength, out actorKeepAliveRequestFrameHeader); if (isHeaderDecoded && actorKeepAliveRequestFrameHeader.OpCode == OpCode.Ping) { _log.DebugFormat("KeepAlive receive request from remote actor [{0}] to local actor [{1}].", _remoteActor, _localActor); var actorKeepAliveResponse = new PongFrame(); var actorKeepAliveResponseBuffer = _channelConfiguration.FrameBuilder.EncodeFrame(actorKeepAliveResponse); _log.DebugFormat("KeepAlive send response from local actor [{0}] to remote actor [{1}].", _localActor, _remoteActor); _innerSession.BeginSend(actorKeepAliveResponseBuffer); } else if (isHeaderDecoded && actorKeepAliveRequestFrameHeader.OpCode == OpCode.Pong) { _log.DebugFormat("KeepAlive receive response from remote actor [{0}] to local actor [{1}].", _remoteActor, _localActor); StopKeepAliveTimeoutTimer(); } else { if (DataReceived != null) { DataReceived(this, new ActorChannelSessionDataReceivedEventArgs( this, _remoteActor, data, dataOffset, dataLength)); } } } }