protected override void Unhandled(object message)
{
if (message is Terminated)
{
var t = message as Terminated;
if (_reader == null || t.ActorRef.Equals(_reader))
{
PublishAndThrow(new EndpointDisassociatedException("Disassociated"), LogLevel.DebugLevel);
}
}
else if (message is StopReading)
{
var stop = message as StopReading;
if (_reader != null)
{
_reader.Tell(stop, stop.ReplyTo);
}
else
{
// initializing, buffer and take care of it later when buffer is sent
EnqueueInBuffer(message);
}
}
else if (message is TakeOver)
{
var takeover = message as TakeOver;
// Shutdown old reader
_handle.Disassociate();
_handle = takeover.ProtocolHandle;
takeover.ReplyTo.Tell(new TookOver(Self, _handle));
Become(Handoff);
}
else if (message is FlushAndStop)
{
_stopReason = DisassociateInfo.Shutdown;
Context.Stop(Self);
}
else if (message is OutboundAck)
{
var ack = message as OutboundAck;
_lastAck = ack.Ack;
if (_ackDeadline.IsOverdue)
TrySendPureAck();
}
else if (message is AckIdleCheckTimer || message is FlushAndStopTimeout || message is BackoffTimer)
{
//ignore
}
else
{
base.Unhandled(message);
}
}