Brunet.Transport.SimulationEdgeListener.HandleEdgeSend C# (CSharp) Method

HandleEdgeSend() public method

public HandleEdgeSend ( Edge from, ICopyable p ) : void
from Edge
p ICopyable
return void
    public void HandleEdgeSend(Edge from, ICopyable p) {
      if(_ploss_prob > 0) {
        lock(_rand) {
          if(_rand.NextDouble() < _ploss_prob) {
            return;
          }
        }
      }

      MemBlock mb = p as MemBlock;
      if(mb == null) {
        lock(_sync) {
          int offset = p.CopyTo(_ba.Buffer, _ba.Offset);
          mb = MemBlock.Reference(_ba.Buffer, _ba.Offset, offset);
          _ba.AdvanceBuffer(offset);
        }
      }

      SimulationEdge se_from = (SimulationEdge)from;
      SimulationEdge se_to = se_from.Partner;
      if(se_to != null) {
        se_to.Push(mb);
      }
    }
  }