Exemple #1
0
        public           InventoryFolder[] ParseSkeleton(NetworkManager.InventorySkeletonEntry[] skeleton, LLUUID owner)
        {
            Dictionary <LLUUID, InventoryFolder>         Folders         = new Dictionary <LLUUID, InventoryFolder>();
            Dictionary <LLUUID, List <InventoryFolder> > FoldersChildren = new Dictionary <LLUUID, List <InventoryFolder> >(skeleton.Length);

            foreach (NetworkManager.InventorySkeletonEntry entry in skeleton)
            {
                InventoryFolder folder = new InventoryFolder(entry.folder_id);
                if (entry.type_default != -1)
                {
                    folder.PreferredType = (AssetType)entry.type_default;
                }
                folder.Version    = entry.version;
                folder.OwnerID    = owner;
                folder.ParentUUID = LLUUID.Parse(entry.parent_id);
                folder.Name       = entry.name;
                Folders.Add(entry.folder_id, folder);

                if (entry.parent_id != LLUUID.Zero)
                {
                    List <InventoryFolder> parentChildren;
                    if (!FoldersChildren.TryGetValue(entry.parent_id, out parentChildren))
                    {
                        parentChildren = new List <InventoryFolder>();
                        FoldersChildren.Add(entry.parent_id, parentChildren);
                    }
                    parentChildren.Add(folder);
                }
            }

            foreach (KeyValuePair <LLUUID, List <InventoryFolder> > pair in FoldersChildren)
            {
                if (Folders.ContainsKey(pair.Key))
                {
                    InventoryFolder parentFolder = Folders[pair.Key];
                    parentFolder.DescendentCount = pair.Value.Count; // Should we set this here? it's just the folders, not the items!
                }
            }

            // Should we do this or just return an IEnumerable?
            InventoryFolder[] ret = new InventoryFolder[Folders.Count];
            int index             = 0;

            foreach (InventoryFolder folder in Folders.Values)
            {
                ret[index] = folder;
                ++index;
            }
            return(ret);
        }
Exemple #2
0
        public void Parse(NetworkManager.LoginMethodResponse reply)
        {
            AgentID         = LLUUID.Parse(reply.agent_id);
            SessionID       = LLUUID.Parse(reply.session_id);
            SecureSessionID = LLUUID.Parse(reply.secure_session_id);
            FirstName       = reply.first_name;
            LastName        = reply.last_name;
            StartLocation   = reply.start_location;
            AgentAccess     = reply.agent_access;

            LLSDArray look_at = (LLSDArray)LLSDParser.DeserializeNotation(reply.look_at);

            LookAt = new LLVector3(
                (float)look_at[0].AsReal(),
                (float)look_at[1].AsReal(),
                (float)look_at[2].AsReal());

            if (reply.home != null)
            {
                LLSDMap   home  = (LLSDMap)LLSDParser.DeserializeNotation(reply.home);
                LLSDArray array = (LLSDArray)home["position"];
                HomePosition = new LLVector3(
                    (float)array[0].AsReal(),
                    (float)array[1].AsReal(),
                    (float)array[2].AsReal());

                array      = (LLSDArray)home["look_at"];
                HomeLookAt = new LLVector3(
                    (float)array[0].AsReal(),
                    (float)array[1].AsReal(),
                    (float)array[2].AsReal());
            }

            CircuitCode    = (uint)reply.circuit_code;
            RegionX        = (uint)reply.region_x;
            RegionY        = (uint)reply.region_y;
            SimPort        = (ushort)reply.sim_port;
            SimIP          = IPAddress.Parse(reply.sim_ip);
            SeedCapability = reply.seed_capability;

            if (reply.buddy_list != null)
            {
                BuddyList = new FriendInfo[reply.buddy_list.Length];
                for (int i = 0; i < BuddyList.Length; ++i)
                {
                    NetworkManager.BuddyListEntry buddy = reply.buddy_list[i];
                    BuddyList[i] = new FriendInfo(buddy.buddy_id, (FriendRights)buddy.buddy_rights_given,
                                                  (FriendRights)buddy.buddy_rights_has);
                }
            }
            else
            {
                BuddyList = new FriendInfo[0];
            }

            InventoryRoot     = LLUUID.Parse(reply.inventory_root[0].folder_id);
            LibraryRoot       = LLUUID.Parse(reply.inventory_lib_root[0].folder_id);
            LibraryOwner      = LLUUID.Parse(reply.inventory_lib_owner[0].agent_id);
            InventorySkeleton = ParseSkeleton(reply.inventory_skeleton, AgentID);
            LibrarySkeleton   = ParseSkeleton(reply.inventory_skel_lib, LibraryOwner);
        }