public IInternalSession Create(string swid)
    {
        byte[] localStorageKey = keychain.LocalStorageKey;
        IDocumentCollection <AlertDocument>            documentCollection  = GetDocumentCollection <AlertDocument>(swid, "Alerts", databaseDirectoryCreator, localStorageKey, documentCollectionFactory);
        IDocumentCollection <FriendDocument>           documentCollection2 = GetDocumentCollection <FriendDocument>(swid, "Friends", databaseDirectoryCreator, localStorageKey, documentCollectionFactory);
        IDocumentCollection <FriendInvitationDocument> documentCollection3 = GetDocumentCollection <FriendInvitationDocument>(swid, "FriendInvitations", databaseDirectoryCreator, localStorageKey, documentCollectionFactory);
        IDocumentCollection <UserDocument>             documentCollection4 = GetDocumentCollection <UserDocument>(swid, "Users", databaseDirectoryCreator, localStorageKey, documentCollectionFactory);

        databaseCorruptionHandler.Add(documentCollection4);
        string       dirPath      = BuildDocCollectionPath(databaseDirectoryCreator, swid);
        UserDatabase userDatabase = new UserDatabase(documentCollection, documentCollection2, documentCollection3, documentCollection4, localStorageKey, dirPath, epochTime, documentCollectionFactory, databaseCorruptionHandler, coroutineManager);

        database.ClearServerTimeOffsetMillis();
        epochTime.OffsetMilliseconds = (database.GetServerTimeOffsetMillis() ?? 0);
        logger.Debug("Initial time offset: " + epochTime.Offset);
        SessionDocument sessionDocument = database.GetSessionDocument(swid);

        keychain.PushNotificationKey = sessionDocument.CurrentSymmetricEncryptionKey;
        IWebCallEncryptor      webCallEncryptor      = webCallEncryptorFactory.Create(sessionDocument.CurrentSymmetricEncryptionKey, sessionDocument.SessionId);
        IGuestControllerClient guestControllerClient = guestControllerClientFactory.Create(swid);
        ISessionRefresher      sessionRefresher      = sessionRefresherFactory.Create(mixSessionStarter, guestControllerClient);
        IMixWebCallFactory     mixWebCallFactory     = mixWebCallFactoryFactory.Create(webCallEncryptor, swid, sessionDocument.GuestControllerAccessToken, sessionRefresher);

        guestControllerClient.OnAccessTokenChanged += delegate(object sender, AbstractGuestControllerAccessTokenChangedEventArgs e)
        {
            mixWebCallFactory.GuestControllerAccessToken = e.GuestControllerAccessToken;
        };
        AssetLoader             assetLoader           = new AssetLoader(logger, wwwCallFactory);
        IList <IInternalFriend> friends               = CreateFriends(userDatabase);
        AgeBandType             ageBandType           = AgeBandTypeConverter.Convert(sessionDocument.AgeBand);
        DateTime               lastRefreshTime        = epochTime.FromSeconds(sessionDocument.LastProfileRefreshTime);
        RegistrationProfile    registrationProfile    = new RegistrationProfile(logger, sessionDocument.DisplayNameText, sessionDocument.ProposedDisplayName, sessionDocument.ProposedDisplayNameStatus, sessionDocument.FirstName, sessionDocument.AccountStatus, lastRefreshTime, sessionDocument.CountryCode);
        GetStateResponseParser getStateResponseParser = new GetStateResponseParser(logger);
        NotificationPoller     notificationPoller     = new NotificationPoller(logger, mixWebCallFactory, notificationQueue, pollCountdownStopwatch, getStateResponseParser, epochTime, random, database, swid);
        DisplayName            displayName            = new DisplayName(sessionDocument.DisplayNameText);
        LocalUser              localUser              = new LocalUser(logger, displayName, swid, friends, ageBandType, database, userDatabase, registrationProfile, mixWebCallFactory, guestControllerClient, notificationQueue, encryptor, epochTime);
        Session session = new Session(logger, localUser, sessionDocument.GuestControllerAccessToken, sessionDocument.PushNotificationToken != null, notificationPoller, coroutineManager, database, userDatabase, guestControllerClient, mixWebCallFactory, epochTime, databaseCorruptionHandler, sessionStatus, keychain, getStateResponseParser, clientVersion, notificationQueue);

        try
        {
            NotificationHandler.Handle(notificationDispatcher, userDatabase, localUser, epochTime);
            notificationQueue.LatestSequenceNumber = sessionDocument.LatestNotificationSequenceNumber;
            IEnumerable <IncomingFriendInvitation> incomingFriendInvitations = GetIncomingFriendInvitations(userDatabase, localUser);
            foreach (IncomingFriendInvitation item in incomingFriendInvitations)
            {
                localUser.AddIncomingFriendInvitation(item);
            }
            IEnumerable <OutgoingFriendInvitation> outgoingFriendInvitations = GetOutgoingFriendInvitations(userDatabase, localUser);
            foreach (OutgoingFriendInvitation item2 in outgoingFriendInvitations)
            {
                localUser.AddOutgoingFriendInvitation(item2);
            }
        }
        catch (Exception)
        {
            session.Dispose();
            throw;
        }
        return(session);
    }
        public static OfflineRegistrationProfile Load(string username)
        {
            OfflineRegistrationProfile offlineRegistrationProfile = new OfflineRegistrationProfile();

            offlineRegistrationProfile.data = RegistrationProfile.Load(username);
            return(offlineRegistrationProfile);
        }
Ejemplo n.º 3
0
    public static RegistrationProfile Load(string userName)
    {
        RegistrationProfile registrationProfile = OfflineDatabase.Read <RegistrationProfile>(Id(userName));

        if (string.IsNullOrEmpty(registrationProfile.userName))
        {
            registrationProfile.userName = userName;
            OfflineDatabase.Write(registrationProfile, Id(userName));
        }
        return(registrationProfile);
    }
Ejemplo n.º 4
0
        private void continueLoginWithOfflineDataCopy()
        {
            OfflineDatabase offlineDatabase = Service.Get <OfflineDatabase>();
            string          username        = LocalUser.RegistrationProfile.Username;

            offlineDatabase.AccessToken = RegistrationProfile.Id(username);
            RegistrationProfile value = offlineDatabase.Read <RegistrationProfile>();

            value.userName    = username;
            value.displayName = LocalUser.RegistrationProfile.DisplayName;
            value.firstName   = LocalUser.RegistrationProfile.FirstName;
            value.parentEmail = LocalUser.RegistrationProfile.ParentEmail;
            offlineDatabase.Write(value);
            eventDispatcher.DispatchEvent(new SessionEvents.SessionStartedEvent(accessToken, localPlayerSwid));
        }
Ejemplo n.º 5
0
    public static void ImportData(string userName)
    {
        JsonService jsonService = Service.Get <JsonService>();
        TextEditor  textEditor  = new TextEditor();

        textEditor.Paste();
        OfflineDataExport offlineDataExport = jsonService.Deserialize <OfflineDataExport>(textEditor.text);

        if (string.IsNullOrEmpty(userName))
        {
            userName = offlineDataExport.UserName;
        }
        else
        {
            RegistrationProfile registrationProfile = OfflineDatabase.Read <RegistrationProfile>(RegistrationProfile.Id(userName));
            if (!string.IsNullOrEmpty(registrationProfile.userName))
            {
                offlineDataExport.RegistrationProfile.displayName = registrationProfile.displayName;
                offlineDataExport.RegistrationProfile.firstName   = registrationProfile.firstName;
                offlineDataExport.RegistrationProfile.parentEmail = registrationProfile.parentEmail;
            }
            else
            {
                offlineDataExport.RegistrationProfile.displayName = userName;
            }
        }
        string token = RegistrationProfile.Id(userName);

        offlineDataExport.RegistrationProfile.userName = userName;
        OfflineDatabase.Write(offlineDataExport.BreadCrumbs, token);
        OfflineDatabase.Write(offlineDataExport.ClaimableRewards, token);
        OfflineDatabase.Write(offlineDataExport.ConsumableInventory, token);
        OfflineDatabase.Write(offlineDataExport.Equipment, token);
        OfflineDatabase.Write(offlineDataExport.DailySpinData, token);
        OfflineDatabase.Write(offlineDataExport.IglooData, token);
        OfflineDatabase.Write(offlineDataExport.RoomRewards, token);
        OfflineDatabase.Write(offlineDataExport.Assets, token);
        OfflineDatabase.Write(offlineDataExport.Outfit, token);
        OfflineDatabase.Write(offlineDataExport.Profile, token);
        OfflineDatabase.Write(offlineDataExport.QuestStates, token);
        OfflineDatabase.Write(offlineDataExport.RegistrationProfile, token);
        OfflineDatabase.Write(offlineDataExport.IglooLayouts, token);
        OfflineDatabase.Write(offlineDataExport.Tube, token);
        OfflineDatabase.Write(offlineDataExport.Tutorials, token);
    }
Ejemplo n.º 6
0
        protected override void PerformOfflineAction(OfflineDatabase offlineDatabase, IOfflineDefinitionLoader offlineDefinitions)
        {
            string world = "Igloo";

            switch (LocalizationLanguage.GetLanguageFromLanguageString(Language))
            {
            case DevonLocalization.Core.Language.es_LA:
                world = "Iglú";
                break;

            case DevonLocalization.Core.Language.fr_FR:
                world = "Iglou";
                break;

            case DevonLocalization.Core.Language.pt_BR:
                world = "Iglu";
                break;
            }
            SignedJoinRoomData = PostRoomPlayersOperation.JoinRoom(world, Language, IglooId, offlineDatabase, offlineDefinitions);
            SignedJoinRoomData.Data.extraLayoutData = offlineDatabase.Read <IglooEntity>().Data.activeLayout;
            if (SignedJoinRoomData.Data.extraLayoutData == null)
            {
                SignedJoinRoomData.Data.extraLayoutData = new SceneLayout
                {
                    zoneId = IglooId.name
                };
            }
            RegistrationProfile registrationProfile = offlineDatabase.Read <RegistrationProfile>();

            SignedJoinRoomData.Data.roomOwnerName = registrationProfile.displayName;
            if (string.IsNullOrEmpty(SignedJoinRoomData.Data.roomOwnerName))
            {
                SignedJoinRoomData.Data.roomOwnerName = registrationProfile.userName;
            }
            SignedJoinRoomData.Data.roomOwner = true;
        }
        protected override void PerformOfflineAction(OfflineDatabase offlineDatabase, IOfflineDefinitionLoader offlineDefinitions)
        {
            ResponseBody        = new LocalPlayerData();
            ResponseBody.member = true;
            ResponseBody.membershipExpireDate       = DateTime.UtcNow.AddMonths(1).GetTimeInMilliseconds();
            ResponseBody.trialAvailable             = false;
            ResponseBody.subscriptionPaymentPending = false;
            ResponseBody.id = new PlayerId
            {
                id   = offlineDatabase.AccessToken,
                type = PlayerId.PlayerIdType.SWID
            };
            ClubPenguin.Net.Offline.Profile profile = offlineDatabase.Read <ClubPenguin.Net.Offline.Profile>();
            ResponseBody.profile = new ClubPenguin.Net.Domain.Profile
            {
                colour  = profile.Colour,
                daysOld = profile.DaysOld
            };
            ResponseBody.outfit           = offlineDatabase.Read <ClubPenguin.Net.Offline.PlayerOutfitDetails>().Parts;
            ResponseBody.mascotXP         = offlineDatabase.Read <ClubPenguin.Net.Offline.PlayerAssets>().Assets.mascotXP;
            ResponseBody.minigameProgress = new List <MinigameProgress>();
            ResponseBody.quests           = SetProgressOperation.GetQuestStateCollection(offlineDatabase.Read <QuestStates>(), offlineDefinitions, includeComplete: true);
            ResponseBody.tutorialData     = new List <sbyte>(offlineDatabase.Read <TutorialData>().Bytes);
            List <Breadcrumb> list = new List <Breadcrumb>();

            foreach (Breadcrumb breadcrumb in offlineDatabase.Read <BreadcrumbCollection>().breadcrumbs)
            {
                list.Add(new Breadcrumb
                {
                    id             = breadcrumb.id,
                    breadcrumbType = breadcrumb.breadcrumbType
                });
            }
            ResponseBody.breadcrumbs = new BreadcrumbsResponse
            {
                breadcrumbs = list
            };
            RegistrationProfile registrationProfile = offlineDatabase.Read <RegistrationProfile>();

            ResponseBody.name = registrationProfile.displayName;
            if (string.IsNullOrEmpty(ResponseBody.name))
            {
                ResponseBody.name = registrationProfile.userName;
            }
            ResponseBody.claimedRewardIds = offlineDatabase.Read <ClaimableRewardData>().ClimedRewards;
            ZoneId zoneId = new ZoneId();

            zoneId.name       = "DefaultIgloo";
            zoneId.instanceId = registrationProfile.Id();
            ZoneId      zoneId2     = zoneId;
            IglooEntity iglooEntity = offlineDatabase.Read <IglooEntity>();

            if (iglooEntity.Data.activeLayout != null)
            {
                string zoneId3 = iglooEntity.Data.activeLayout.zoneId;
                if (!string.IsNullOrEmpty(zoneId3))
                {
                    zoneId2.name = zoneId3;
                }
            }
            ResponseBody.zoneId = zoneId2;
            List <SavedIglooLayoutSummary> list2 = new List <SavedIglooLayoutSummary>();

            foreach (SavedSceneLayout layout in offlineDatabase.Read <SceneLayoutEntity>().Layouts)
            {
                list2.Add(new SavedIglooLayoutSummary
                {
                    createdDate     = layout.createdDate.GetValueOrDefault(0L),
                    lastUpdatedDate = layout.lastModifiedDate.GetValueOrDefault(0L),
                    layoutId        = layout.layoutId,
                    lot             = layout.zoneId,
                    memberOnly      = layout.memberOnly,
                    name            = layout.name
                });
            }
            ResponseBody.iglooLayouts = new SavedIglooLayoutsSummary
            {
                activeLayoutId = iglooEntity.Data.activeLayoutId,
                activeLayoutServerChangeNotification = ActiveLayoutServerChangeNotification.NoServerChange,
                visibility = iglooEntity.Data.visibility.GetValueOrDefault(IglooVisibility.PRIVATE),
                layouts    = list2
            };
            ClubPenguin.Net.Offline.DailySpinData dailySpinData = offlineDatabase.Read <ClubPenguin.Net.Offline.DailySpinData>();
            ResponseBody.dailySpinData = new ClubPenguin.Net.Domain.DailySpinData
            {
                currentChestId = dailySpinData.CurrentChestId,
                numChestsReceivedOfCurrentChestId = dailySpinData.NumChestsReceivedOfCurrentChestId,
                numPunchesOnCurrentChest          = dailySpinData.NumPunchesOnCurrentChest,
                timeOfLastSpinInMilliseconds      = dailySpinData.TimeOfLastSpinInMilliseconds
            };
            ClubPenguin.Net.Offline.SessionData sessionData = offlineDatabase.Read <ClubPenguin.Net.Offline.SessionData>();
            if (sessionData.Data.sessionId != 0)
            {
                ResponseBody.onlineLocation = sessionData.CurrentRoom;
            }
        }