IRequestTarget IActorBoundGatewaySync.OpenChannel(IActorRef actor, TaggedType[] types, object tag, ActorBindingFlags bindingFlags)
{
if (_isStopped)
return null;
// create token and add to waiting list
string token;
while (true)
{
token = Guid.NewGuid().ToString();
lock (_waitingMap)
{
if (_waitingMap.ContainsKey(token) == false)
{
_waitingMap.Add(token, new WaitingItem
{
Tag = tag,
BindingActor = Tuple.Create(actor, types, bindingFlags),
Time = DateTime.UtcNow
});
break;
}
}
}
var address = string.Join("|", ChannelType.Udp.ToString(),
_initiator.ConnectEndPoint.ToString(),
token);
return new BoundActorTarget(1, address);
}