private void addAsPorts(NodeDesc node, List <string> ids, Type type, Dir direction) { foreach (var id in ids) { ensurePortAdded(node, new PortDesc(id, type, direction)); } }
private PortDesc ensurePortAdded(NodeDesc ndesc, PortDesc pdesc) { if (ndesc.ownedPortIdToPortDesc.ContainsKey(pdesc.id)) { var epd = ndesc.ownedPortIdToPortDesc[pdesc.id]; if (epd.direction == Dir.UNKNOWN) { epd.direction = pdesc.direction; } if (epd.direction != pdesc.direction) { epd.direction = Dir.BIDIR; } if (epd.type != pdesc.type) { throw new Exception("Port conflict. Tried to merge: " + pdesc.ToString() + " with existing " + epd.ToString()); } return(epd); } else { ndesc.ownedPortIdToPortDesc.Add(pdesc.id, pdesc); return(pdesc); } }
private void processInterface(Metadata mdata) { var iface = mdata.dataRoot.get("Interface"); if (iface.Type == ValueTypes.IN_REF) { var inref = iface.castTo <AIntRef>(); var ifaceAstruct = ebxDataContainers.instances[inref.instanceGuid].data; var ifaceNodeDesc = new NodeDesc(); ifaceNodeDesc.name = "Interface"; ifaceNodeDesc.nodeGuid = inref.instanceGuid; ifaceNodeDesc.isInterface = true; addAsPorts(ifaceNodeDesc, extractIdsFromArray(ifaceAstruct.get("Fields")), Type.PROPERTY, Dir.UNKNOWN); addAsPorts(ifaceNodeDesc, extractIdsFromArray(ifaceAstruct.get("InputEvents")), Type.EVENT, Dir.IN); addAsPorts(ifaceNodeDesc, extractIdsFromArray(ifaceAstruct.get("OutputEvents")), Type.EVENT, Dir.OUT); addAsPorts(ifaceNodeDesc, extractIdsFromArray(ifaceAstruct.get("InputLinks")), Type.LINK, Dir.IN); addAsPorts(ifaceNodeDesc, extractIdsFromArray(ifaceAstruct.get("OutputLinks")), Type.LINK, Dir.OUT); if (mdata.nodeGuidToNodeDesc.ContainsKey(inref.instanceGuid)) { mdata.nodeGuidToNodeDesc.Remove(inref.instanceGuid); } mdata.nodeGuidToNodeDesc.Add(inref.instanceGuid, ifaceNodeDesc); } }
private void processObjects(Metadata mdata) { var objects = new List <Tuple <string, AStruct> >(); if (mdata.partials.Contains("PrefabBlueprint")) { var objectRefsArray = mdata.dataRoot.get("Objects").castTo <AArray>(); foreach (var possiblyRef in objectRefsArray.elements) { if (possiblyRef.Type == ValueTypes.IN_REF) { var inRef = possiblyRef.castTo <AIntRef>(); var referencedData = ebxDataContainers.instances[inRef.instanceGuid].data; objects.Add(new Tuple <string, AStruct>(inRef.instanceGuid, referencedData)); } else { throw new Exception("Incorret type found in array: " + possiblyRef.Type); } } } else if (mdata.partials.Contains("ObjectBlueprint")) { foreach (var instance in ebxDataContainers.instances.Values) { if (instance.guid != assetGuid) { objects.Add(new Tuple <string, AStruct>(instance.guid, instance.data)); } } } else { throw new Exception("Unsupported blueprint encountered"); } foreach (var t in objects) { var nodeDesc = new NodeDesc(); nodeDesc.name = t.Item2.name; nodeDesc.nodeGuid = t.Item1; mdata.nodeGuidToNodeDesc.Add(t.Item1, nodeDesc); } }
// Slice find() operation. public override NodeDesc find(string name, Current c) { lock(this) { if(_destroyed) { throw new ObjectNotExistException(); } NodeI p = (NodeI) _contents[name]; if(p == null) { throw new NoSuchName(name); } NodeDesc d = new NodeDesc(); d.name = name; d.type = p is FileI ? NodeType.FileType : NodeType.DirType; d.proxy = NodePrxHelper.uncheckedCast(c.adapter.createProxy(p.id())); return d; } }
// Slice find() operation. public override NodeDesc find(string name, Current c) { lock (this) { if (_destroyed) { throw new ObjectNotExistException(); } NodeI p = (NodeI)_contents[name]; if (p == null) { throw new NoSuchName(name); } NodeDesc d = new NodeDesc(); d.name = name; d.type = p is FileI ? NodeType.FileType : NodeType.DirType; d.proxy = NodePrxHelper.uncheckedCast(c.adapter.createProxy(p.id())); return(d); } }
// Slice list() operation. public override NodeDesc[] list(Current c) { lock(this) { if(_destroyed) { throw new ObjectNotExistException(); } NodeDesc[] ret = new NodeDesc[_contents.Count]; int i = 0; foreach(DictionaryEntry e in _contents) { NodeI p = (NodeI)e.Value; ret[i] = new NodeDesc(); ret[i].name = (string)e.Key; ret[i].type = p is FileI ? NodeType.FileType : NodeType.DirType; ret[i].proxy = NodePrxHelper.uncheckedCast(c.adapter.createProxy(p.id())); ++i; } return ret; } }
// Slice list() operation. public override NodeDesc[] list(Current c) { lock (this) { if (_destroyed) { throw new ObjectNotExistException(); } var ret = new NodeDesc[_contents.Count]; int i = 0; foreach (var e in _contents) { var p = e.Value; ret[i] = new NodeDesc(); ret[i].name = e.Key; ret[i].type = p is FileI ? NodeType.FileType : NodeType.DirType; ret[i].proxy = NodePrxHelper.uncheckedCast(c.adapter.createProxy(p.id())); ++i; } return(ret); } }