public void HandleData(MemBlock data, ISender return_path, object state)
{
AHSender from = return_path as AHSender;
if(from == null) {
return;
}
AHAddress target = (AHAddress) from.Destination;
MemBlock payload;
int local_id, remote_id;
_it.Parse(data, out payload, out local_id , out remote_id);
IIdentifierPair ip;
SubringEdge se;
if(_it.TryGet(local_id, remote_id, out ip)) {
se = ip as SubringEdge;
} else if(local_id == 0) {
if(!from.Node.Realm.Equals(_shared_node.Realm)) {
// We don't have matching realms
return;
}
var rem_sta = new SubringTransportAddress(target, from.Node.Realm);
se = new SubringEdge(_local_ta, rem_sta, true, from, _ptype);
_it.Add(se);
se.RemoteID = remote_id;
se.CloseEvent += CloseHandler;
SendEdgeEvent(se);
} else {
// Probably an edge closed earlier...
return;
}
se.ReceivedPacketEvent(payload);
}