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);
            }
        }
示例#5
0
        // 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;
            }
        }
示例#6
0
        // 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);
            }
        }
示例#7
0
        // 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;
            }
        }
示例#8
0
        // 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);
            }
        }