Exemplo n.º 1
0
        public string getUserData()
        {
            /*
             * // Example of the output after serialization
             * <languages>
             * <language>
             * <id>0</id>
             * <shortName>en</shortName>
             * <longName>English</longName>
             * </language>
             * <language>
             * <id>1</id>
             * <shortName>de</shortName>
             * <longName>Deutsch</longName>
             * </language>
             * <language>
             * <id>2</id>
             * <shortName>fr</shortName>
             * <longName>Francais</longName>
             * </language>
             * </languages>
             * <messageHighestId>3</messageHighestId>
             * <unreadMessages>0</unreadMessages>
             * <maxServerEventId>2218</maxServerEventId>
             * <nextTurn>
             * <targetTime>2014-12-14T18:55:52.057</targetTime>
             * </nextTurn>
             *
             *
             * <map>
             * <staticMap>
             * <star>
             * <starId>23</starId>
             * <xpos>4999</xpos>
             * <ypos>5014</ypos>
             * <type>3</type>
             * <gif>RedSun_1.png</gif>
             * <name>Capella 457</name>
             * <size>24</size>
             * <ressourceId>4</ressourceId>
             * </star>
             * </staticMap>
             * <GalaxyMap>
             * <id>1</id>
             * <galaxyName>Starmap</galaxyName>
             * <objectId>1</objectId>
             * <size>10000</size>
             * </GalaxyMap>
             * </map>
             *
             *
             * <knownUsers>
             * <knownUser>
             * <id>6</id>
             * <username>Demo user 000006</username>
             * <currentRelation>1</currentRelation>
             * <targetRelation>1</targetRelation>
             * <otherUserRelationTowardsPlayer>1</otherUserRelationTowardsPlayer>
             * <allianceId>0</allianceId>
             * <popVicPoints>-1</popVicPoints>
             * <researchVicPoints>-1</researchVicPoints>
             * <goodsVicPoints>-1</goodsVicPoints>
             * <shipVicPoints>-1</shipVicPoints>
             * <overallVicPoints>1095</overallVicPoints>
             * <overallRank>3</overallRank>
             * </knownUser>
             *
             *
             * <allianceDiplomacy>
             * <allianceDetail>
             * <id>4</id>
             * <name>Heroes</name>
             * <allianceOwner>5</allianceOwner>
             * <overallVicPoints>1708</overallVicPoints>
             * <overallRank>1</overallRank>
             * </allianceDetail>
             * <allianceInvite>
             * <userId>1</userId>
             * <allianceId>4</allianceId>
             * </allianceInvite>
             * </allianceDiplomacy>
             *
             *
             *
             * <commNodes>
             * <commNode>
             * <id>286</id>
             * <owner>0</owner>
             * <name>Space Station</name>
             * <unformattedName>NoName</unformattedName>
             * <positionX>4960</positionX>
             * <positionY>4960</positionY>
             * <systemX>0</systemX>
             * <systemY>0</systemY>
             * <connectionType>0</connectionType>
             * <connectionId>1292</connectionId>
             * <activ>1</activ>
             * <visited>0</visited>
             * <readAccess>0</readAccess>
             * <writeAccess>0</writeAccess>
             * <adminRights>0</adminRights>
             * <informWhenNew>0</informWhenNew>
             * <lastReadMessage>0</lastReadMessage>
             * <messageCount>0</messageCount>
             * <messageUnReadCount>0</messageUnReadCount>
             * </commNode>
             * <commNode>
             * <id>287</id>
             * <owner>0</owner>
             * <name>Space Station</name>
             * <unformattedName>NoName</unformattedName>
             * <positionX>5000</positionX>
             * <positionY>4960</positionY>
             * <systemX>0</systemX>
             * <systemY>0</systemY>
             * <connectionType>0</connectionType>
             * <connectionId>1293</connectionId>
             * <activ>1</activ>
             * <visited>0</visited>
             * <readAccess>0</readAccess>
             * <writeAccess>0</writeAccess>
             * <adminRights>0</adminRights>
             * <informWhenNew>0</informWhenNew>
             * <lastReadMessage>0</lastReadMessage>
             * <messageCount>0</messageCount>
             * <messageUnReadCount>0</messageUnReadCount>
             * </commNode>
             *
             *
             *
             * <allowedBuildings>
             * <allowedBuilding>
             * <allowedBuildingId>3</allowedBuildingId>
             * </allowedBuilding>
             *
             *
             * <PlayerResearches>
             * <PlayerResearch>
             * <id>1</id>
             * <researchable>0</researchable>
             * <isCompleted>1</isCompleted>
             * <investedResearchpoints>3</investedResearchpoints>
             * <researchPriority>0</researchPriority>
             * </PlayerResearch>
             *
             *
             * <ShipTemplates>
             * <ShipTemplate>
             *
             *
             *
             * <Quests>
             * <Quest>
             *
             * <TradeOffers />
             *
             * <allowedModules>
             * <allowedModule>
             *
             * <Colonies>
             * <Colony>
             *
             *
             * <Labels>
             * <languageId>0</languageId>
             * <Label>
             * <id>1</id>
             * <label>Orange dwarf star</label>
             * </Label>
             *
             *
             *
             * <Colonies>
             * <Colony>
             *
             *
             *
             *
             *
             * SpacegameServer.Core.User user = (SpacegameServer.Core.User)Core.Core.Instance.users[userId];
             * if (user == null) return "";
             *
             * string temp = "";
             * BusinessConnector.Serialize<Core.User>(user, ref temp, true);
             */


            BC.XMLGroups.userData userData = new BC.XMLGroups.userData();

            if (!Core.Core.Instance.users.ContainsKey(this.userId))
            {
                return("<user></user>");
            }

            Core.User user = Core.Core.Instance.users[this.userId];

            userData.user       = user;
            userData.knownUsers = XMLGroups.UserContacts.createAllContacts(user);

            //userData.languageShortName = user.languageShortName;
            userData.languages = Core.Core.Instance.languages.Where(e => e != null).ToList();


            userData.messageHighestId = 0;
            userData.unreadMessages   = 0;


            if (Core.Core.Instance.messages.Values.Any(e => e.messageParticipants.Any(f => f.participant == this.userId)))
            {
                /*
                 * userData.messageHighestId = Core.Core.Instance.messages.Values.Where(e => e.messageParticipants.Any(f => f.participant == this.userId))
                 * .OrderByDescending(e => e.id).First().id;
                 */
                userData.messageHighestId = Core.Core.Instance.messages.Values.OrderByDescending(e => e.id).First().id;
                userData.unreadMessages   = Core.Core.Instance.messages.Values.Any(e => e.messageParticipants.Any(f => f.participant == this.userId && !f.read)) ? 1 : 0;
            }



            userData.maxServerEventId = (int)Core.Core.Instance.identities.galacticEvents.id;
            userData.allowedBuildings = XMLGroups.AllowedBuilding.createAllowedBuildings(user);
            userData.PlayerResearches = user.getPlayerResearch();
            userData.ShipHulls        = XMLGroups.AllowedShipHulls.createAllowedShipHulls(user);
            userData.ShipTemplates    = Core.Core.Instance.shipTemplate.Values.Where(e => e.userId == user.id).ToList();
            userData.Quests           = user.quests;
            userData.allowedModules   = XMLGroups.AllowedModule.createAllowedModules(user);

            userData.TradeOffers = new List <Core.TradeOffer>();

            /*
             *
             *
             *
             * userData.TradeOffers;
             */


            userData.allianceDiplomacy = XMLGroups.KnownAlliances.createAllianceContacts(user);
            userData.allianceRelations = XMLGroups.AllianceUserRelations.createAllianceUserRelations(user);
            userData.allianceInvites   = XMLGroups.AllianceInvites.createAllianceInvites(user);
            userData.ships             = new List <Core.Ship>();

            var allColonies = new List <Core.Colony>();

            userData.commNodes           = new XMLGroups.CommNodes();
            userData.commNodes.commNode  = XMLGroups.CommNodes.createKnownAndNearNodesList(user);
            userData.staticMap           = new XMLGroups.StaticMap();
            userData.staticMap.stars     = new List <Core.SystemMap>();
            userData.staticMap.GalaxyMap = core.GalaxyMap;
            core.getUserScans(userId, null, ref userData.ships, ref userData.staticMap.stars, ref allColonies);
            userData.Colonies = Core.Colony.userScanCopy(allColonies, user.id);
            List <Core.Ship> transcensions =
                (from ship in core.ships
                 where  ship.Value.shipTranscension != null
                 select ship.Value).ToList();

            userData.ships.AddRange(transcensions.Except(userData.ships));

            //int startingHours = 4 - (DateTime.Now.Hour  % 4 );
            //DateTime nextTurn = DateTime.Now.AddHours(startingHours);
            DateTime nextTurn = SpacegameServer.Core.Core.nextTurnDateTime(DateTime.Now);

            userData.targetTime           = nextTurn.ToString("yyyy-MM-ddTHH:mm:00");
            userData.unreadCombatMessages = core.combats.Any(e => e.Value.DefenderUserId == user.id && !e.Value.DefenderHasRead);

            userData.Labels = XMLGroups.Labels.GetLabels(user.language);

            string x = "";

            BusinessConnector.Serialize <BC.XMLGroups.userData>(userData, ref x, true);
            return(x);
        }