///<summary>A new underlying edge has been created, this is used to add the
    ///edge to the EdgeListener for handling and to wrap the edge.</summary>
    public void AddEdge(EdgeCreationWrapper ecw) {
      Edge e = ecw.Edge;
      lock(_sync) {
        _edge_to_ecw[e] = ecw;
      }

      try {
        e.CloseEvent += EdgeClose;
      } catch {
        EdgeClose(e, null);
      }

      if(!e.IsClosed) {
        WrapEdge(ecw.Edge);
      }
    }
 ///<summary>A new edge has been created!  This comes from the underlying
 ///EL's SendEdgeEvent.</summary>
 protected void HandleEdgeEvent(object edge, EventArgs ea) {
   Edge e = edge as Edge;
   if(e == null) {
     throw new Exception("Not an Edge!");
   }
   EdgeCreationWrapper ecw = new EdgeCreationWrapper(null, SendEdgeEventHelper, e, this);
   AddEdge(ecw);
 }
 ///<summary>This wraps the underlying CreateEdgeTo using EdgeCreationWrappers</summary>
 public override void CreateEdgeTo(TransportAddress ta, EdgeCreationCallback ecb) {
   EdgeCreationWrapper ecw = new EdgeCreationWrapper(ta, ecb, null, this);
   _el.CreateEdgeTo(ta, ecw.Callback);
 }