private void SendMessage(object message, IActorRef sender)
{
if (Monitor.TryEnter(_lock, _timeout))
{
try
{
var cell = _self.Underlying;
if (CellIsReady(cell))
{
cell.Post(sender, message);
}
else
{
_messageQueue.Add(new Envelope { Message = message, Sender = sender });
Mailbox.DebugPrint("{0} temp queueing {1} from {2}", Self, message, sender);
}
}
finally
{
Monitor.Exit(_lock);
}
}
else
{
_system.EventStream.Publish(new Warning(_self.Path.ToString(), GetType(), "Dropping message of type" + message.GetType() + " due to lock timeout"));
_system.DeadLetters.Tell(new DeadLetter(message, sender, _self), sender);
}
}