internal IList <Segment> CreateSegmentsImpl(IPositionable startNode, IPositionable endNode, object type, Vector start_dir, Vector end_dir, IPositionable middle_pos) { NetOptions options = NetOptionsUtil.Ensure(type); CreateSegmentMessage msg = new CreateSegmentMessage() { start_node_id = startNode is Node ? (ushort)((Node)startNode).id : (ushort)0, end_node_id = endNode is Node ? (ushort)((Node)endNode).id : (ushort)0, start_postition = startNode is Node ? null : startNode.position, end_postition = endNode is Node ? null : endNode.position, net_options = options, start_dir = start_dir, end_dir = end_dir, control_point = middle_pos?.position, auto_split = true }; PythonList <Segment> shell = new PythonList <Segment>(); var handle = ClientHandler.Instance.RemoteCall(Contracts.CreateSegments, msg, (ret, error) => { if (error != null) { shell.AssignData(null, error); return(null); } NetSegmentListMessage raw = ret as NetSegmentListMessage; shell.AssignData(raw.list.Select((item) => ObjectStorage.Instance.Segments.SaveData(item)).ToList()); return(null); }); shell.CacheFunc = () => { ClientHandler.Instance.WaitOnHandle(handle); }; return(shell); }