OpenMetaverse.LoginResponseData.ToXmlRpc C# (CSharp) Method

ToXmlRpc() public method

public ToXmlRpc ( XmlWriter writer ) : void
writer System.Xml.XmlWriter
return void
        public void ToXmlRpc(XmlWriter writer)
        {
            writer.WriteStartElement("methodResponse");
            {
                writer.WriteStartElement("params");
                writer.WriteStartElement("param");
                writer.WriteStartElement("value");
                writer.WriteStartElement("struct");
                {
                    if (Success)
                    {
                        // session_id
                        WriteXmlRpcStringMember(writer, false, "session_id", SessionID.ToString());

                        // ui-config
                        WriteXmlRpcArrayStart(writer, "ui-config");
                        WriteXmlRpcStringMember(writer, true, "allow_first_life", "Y");
                        WriteXmlRpcArrayEnd(writer);

                        // inventory-lib-owner
                        WriteXmlRpcArrayStart(writer, "inventory-lib-owner");
                        WriteXmlRpcStringMember(writer, true, "agent_id", LibraryOwner.ToString());
                        WriteXmlRpcArrayEnd(writer);

                        // start_location
                        WriteXmlRpcStringMember(writer, false, "start_location", StartLocation);

                        // seconds_since_epoch
                        WriteXmlRpcIntMember(writer, false, "seconds_since_epoch", Utils.DateTimeToUnixTime(SecondsSinceEpoch));

                        // event_categories (TODO)
                        WriteXmlRpcArrayStart(writer, "event_categories");
                        WriteXmlRpcCategory(writer, "Default Event Category", 20);
                        WriteXmlRpcArrayEnd(writer);

                        // tutorial_setting (TODO)
                        WriteXmlRpcArrayStart(writer, "tutorial_setting");
                        WriteXmlRpcTutorialSetting(writer, "http://127.0.0.1/tutorial/");
                        WriteXmlRpcArrayEnd(writer);

                        // classified_categories (TODO)
                        WriteXmlRpcArrayStart(writer, "classified_categories");
                        WriteXmlRpcCategory(writer, "Default Classified Category", 1);
                        WriteXmlRpcArrayEnd(writer);

                        // inventory-root
                        WriteXmlRpcArrayStart(writer, "inventory-root");
                        WriteXmlRpcStringMember(writer, true, "folder_id", InventoryRoot.ToString());
                        WriteXmlRpcArrayEnd(writer);

                        // sim_port
                        WriteXmlRpcIntMember(writer, false, "sim_port", SimPort);

                        // agent_id
                        WriteXmlRpcStringMember(writer, false, "agent_id", AgentID.ToString());

                        // agent_access
                        WriteXmlRpcStringMember(writer, false, "agent_access", AgentAccess);

                        // inventory-skeleton
                        WriteXmlRpcArrayStart(writer, "inventory-skeleton");
                        if (InventorySkeleton != null)
                        {
                            foreach (InventoryFolder folder in InventorySkeleton)
                                WriteXmlRpcInventoryItem(writer, folder.Name, folder.ParentUUID, (uint)folder.Version, (uint)folder.PreferredType, folder.UUID);
                        }
                        else
                        {
                            WriteXmlRpcInventoryItem(writer, "Inventory", UUID.Zero, 1, (uint)AssetType.Folder, InventoryRoot);
                        }
                        WriteXmlRpcArrayEnd(writer);

                        // buddy-list
                        WriteXmlRpcArrayStart(writer, "buddy-list");
                        if (BuddyList != null)
                        {
                            foreach (FriendInfo friend in BuddyList)
                                WriteXmlRpcBuddy(writer, (uint)friend.MyFriendRights, (uint)friend.TheirFriendRights, friend.UUID);
                        }
                        else
                        {
                            //WriteXmlRpcBuddy(writer, 0, 0, UUID.Random());
                        }
                        WriteXmlRpcArrayEnd(writer);

                        // first_name
                        WriteXmlRpcStringMember(writer, false, "first_name", FirstName);

                        // global-textures
                        WriteXmlRpcArrayStart(writer, "global-textures");
                        writer.WriteStartElement("value");
                        writer.WriteStartElement("struct");
                        {
                            WriteXmlRpcStringMember(writer, false, "sun_texture_id", "cce0f112-878f-4586-a2e2-a8f104bba271");
                            WriteXmlRpcStringMember(writer, false, "cloud_texture_id", "fc4b9f0b-d008-45c6-96a4-01dd947ac621");
                            WriteXmlRpcStringMember(writer, false, "moon_texture_id", "d07f6eed-b96a-47cd-b51d-400ad4a1c428");
                        }
                        writer.WriteEndElement();
                        writer.WriteEndElement();
                        WriteXmlRpcArrayEnd(writer);

                        // inventory-skel-lib
                        WriteXmlRpcArrayStart(writer, "inventory-skel-lib");
                        if (LibrarySkeleton != null)
                        {
                            foreach (InventoryFolder folder in LibrarySkeleton)
                                WriteXmlRpcInventoryItem(writer, folder.Name, folder.ParentUUID, (uint)folder.Version, (uint)folder.PreferredType, folder.UUID);
                        }
                        else
                        {
                            WriteXmlRpcInventoryItem(writer, "Library", UUID.Zero, 1, (uint)AssetType.Folder, LibraryRoot);
                        }
                        WriteXmlRpcArrayEnd(writer);

                        // seed_capability
                        WriteXmlRpcStringMember(writer, false, "seed_capability", SeedCapability);

                        // gestures
                        WriteXmlRpcArrayStart(writer, "gestures");
                        WriteXmlRpcGesture(writer, UUID.Random(), UUID.Random());
                        WriteXmlRpcArrayEnd(writer);

                        // sim_ip
                        WriteXmlRpcStringMember(writer, false, "sim_ip", SimIP.ToString());

                        // inventory-lib-root
                        WriteXmlRpcArrayStart(writer, "inventory-lib-root");
                        WriteXmlRpcStringMember(writer, true, "folder_id", LibraryRoot.ToString());
                        WriteXmlRpcArrayEnd(writer);

                        // login-flags
                        WriteXmlRpcArrayStart(writer, "login-flags");
                        writer.WriteStartElement("value");
                        writer.WriteStartElement("struct");
                        {
                            WriteXmlRpcStringMember(writer, false, "gendered", "Y");
                            WriteXmlRpcStringMember(writer, false, "stipend_since_login", "N");
                            WriteXmlRpcStringMember(writer, false, "ever_logged_in", "Y");
                            if (DateTime.Now.IsDaylightSavingTime())
                                WriteXmlRpcStringMember(writer, false, "daylight_savings", "Y");
                            else
                                WriteXmlRpcStringMember(writer, false, "daylight_savings", "N");
                        }
                        writer.WriteEndElement();
                        writer.WriteEndElement();
                        WriteXmlRpcArrayEnd(writer);

                        // inventory_host
                        WriteXmlRpcStringMember(writer, false, "inventory_host", IPAddress.Loopback.ToString());

                        // home
                        OSDArray homeRegionHandle = new OSDArray(2);
                        uint homeRegionX, homeRegionY;
                        Utils.LongToUInts(HomeRegion, out homeRegionX, out homeRegionY);
                        homeRegionHandle.Add(OSD.FromReal((double)homeRegionX));
                        homeRegionHandle.Add(OSD.FromReal((double)homeRegionY));

                        OSDMap home = new OSDMap(3);
                        home["region_handle"] = homeRegionHandle;
                        home["position"] = OSD.FromVector3(HomePosition);
                        home["look_at"] = OSD.FromVector3(HomeLookAt);

                        WriteXmlRpcStringMember(writer, false, "home", OSDParser.SerializeLLSDNotation(home));

                        // message
                        WriteXmlRpcStringMember(writer, false, "message", Message);

                        // look_at
                        WriteXmlRpcStringMember(writer, false, "look_at", OSDParser.SerializeLLSDNotation(OSD.FromVector3(LookAt)));

                        // login
                        WriteXmlRpcStringMember(writer, false, "login", "true");

                        // event_notifications
                        WriteXmlRpcArrayStart(writer, "event_notifications");
                        WriteXmlRpcArrayEnd(writer);

                        // secure_session_id
                        WriteXmlRpcStringMember(writer, false, "secure_session_id", SecureSessionID.ToString());

                        // region_x
                        WriteXmlRpcIntMember(writer, false, "region_x", RegionX);

                        // last_name
                        WriteXmlRpcStringMember(writer, false, "last_name", LastName);

                        // region_y
                        WriteXmlRpcIntMember(writer, false, "region_y", RegionY);

                        // circuit_code
                        WriteXmlRpcIntMember(writer, false, "circuit_code", CircuitCode);

                        // initial-outfit
                        WriteXmlRpcArrayStart(writer, "initial-outfit");
                        WriteXmlRpcArrayEnd(writer);
                    }
                    else
                    {
                        // Login failure
                    }
                }
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
            writer.Close();
        }