コード例 #1
0
        public Status(ServiceNode serviceNode)
        {
            UIApp.PubSub.Subscribe <ProfileDataResultEvent>(this, ProfileData);

            ServiceNode = serviceNode;

            try
            {
                var data = serviceNode.CacheStorage.ReadFileBytes(GetType().Name);
                if (data != null)
                {
                    using (var unpacker = new Unpacker(data))
                    {
                        _subscriptions = new Subscriptions(unpacker, this);
                        if (unpacker.UnpackBool())
                        {
                            _subscriptionLastTransaction = new LastTransactionInfo(unpacker);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.IgnoreException(ex);
            }

            if (_subscriptions == null)
            {
                _subscriptions = new Subscriptions(AccountId, ChainId, this);
            }
        }
コード例 #2
0
 public FriendInfo(long accountId, LastTransactionInfo lastTransactionInfo, List <long> friends, List <FriendInvitation> invitations)
 {
     AccountId           = accountId;
     LastTransactionInfo = lastTransactionInfo;
     Friends             = friends;
     Invitations         = invitations;
 }
コード例 #3
0
ファイル: Fan.cs プロジェクト: HeleusCore/Heleus.Base
 public FanContainer(Unpacker unpacker, ushort size, Feature feature, FeatureAccount featureAccount) : base(unpacker, size, feature, featureAccount)
 {
     unpacker.Unpack(_fans);
     unpacker.Unpack(_fanOf);
     LastFansTransactionInfo  = new LastTransactionInfo(unpacker);
     LastFanOfTransactionInfo = new LastTransactionInfo(unpacker);
 }
コード例 #4
0
 public FriendInfo(Unpacker unpacker)
 {
     unpacker.Unpack(out AccountId);
     LastTransactionInfo = new LastTransactionInfo(unpacker);
     unpacker.Unpack(out Friends);
     unpacker.Unpack(out Invitations, (u) => new FriendInvitation(AccountId, u));
 }
コード例 #5
0
ファイル: Fan.cs プロジェクト: HeleusCore/Heleus.Base
 public void RemoveFanOf(long accountId, Transaction transaction)
 {
     lock (FeatureAccount)
     {
         _fanOf.Remove(accountId);
         LastFanOfTransactionInfo = new LastTransactionInfo(transaction.TransactionId, transaction.Timestamp);
     }
 }
コード例 #6
0
ファイル: Fan.cs プロジェクト: HeleusCore/Heleus.Base
 public void AddFan(long accountId, Transaction transaction)
 {
     lock (FeatureAccount)
     {
         _fans.Add(accountId);
         LastFansTransactionInfo = new LastTransactionInfo(transaction.TransactionId, transaction.Timestamp);
     }
 }
コード例 #7
0
 public void AddFriendInvitation(FriendInvitation invitation, Transaction transaction)
 {
     lock (this)
     {
         _friendInvitations[invitation.FriendAccountId] = invitation;
         LastFriendTransactionInfo = new LastTransactionInfo(transaction.TransactionId, transaction.Timestamp);
     }
 }
コード例 #8
0
 protected AccountPurchase(Unpacker unpacker)
 {
     unpacker.Unpack(out PurchaseGroupId);
     LastPurchase = new LastTransactionInfo(unpacker);
     if (unpacker.UnpackBool())
     {
         LastConsume = new LastTransactionInfo(unpacker);
     }
 }
コード例 #9
0
 public void RemoveFriend(long accountId, Transaction transaction)
 {
     lock (FeatureAccount)
     {
         _friendInvitations.Remove(accountId);
         _friends.Remove(accountId);
         LastFriendTransactionInfo = new LastTransactionInfo(transaction.TransactionId, transaction.Timestamp);
     }
 }
コード例 #10
0
        public GroupAdministrationInfo(long groupId, long accountId, long transactionId, long timestamp, GroupFlags flags = GroupFlags.None)
        {
            GroupId       = groupId;
            AccountId     = accountId;
            TransactionId = transactionId;
            Flags         = flags;

            AdministrationLastTransactionInfo = new LastTransactionInfo(transactionId, timestamp);

            _accounts[accountId] = GroupAccountFlags.Admin;
        }
コード例 #11
0
        public void ConsumeGroupAdministrationRequest(Transaction transaction, GroupAdministrationRequest accounts, out DirtyGroupAccounts dirtyGroupAccounts)
        {
            dirtyGroupAccounts = new DirtyGroupAccounts();

            lock (this)
            {
                AdministrationLastTransactionInfo = new LastTransactionInfo(transaction.TransactionId, transaction.Timestamp);

                foreach (var added in accounts.AddedAccounts)
                {
                    var id    = added.Key;
                    var flags = added.Value;

                    if (_pendingAccounts.TryGetValue(id, out var pendingFlags))
                    {
                        flags |= pendingFlags;
                    }

                    if ((flags & GroupAccountFlags.HasAccountApproval) != 0 && (flags & GroupAccountFlags.HasAdminApproval) != 0)
                    {
                        flags        &= ~(GroupAccountFlags.HasAccountApproval | GroupAccountFlags.HasAdminApproval);
                        _accounts[id] = flags;
                        _pendingAccounts.Remove(id);
                        dirtyGroupAccounts.AddedAccounts.Add(id);
                    }
                    else
                    {
                        _pendingAccounts[id] = flags;
                    }
                }

                foreach (var removed in accounts.RemovedAccounts)
                {
                    _accounts.Remove(removed);
                    _pendingAccounts.Remove(removed);

                    dirtyGroupAccounts.RemovedAccounts.Add(removed);
                }

                foreach (var updated in accounts.UpdatedFlags)
                {
                    var id    = updated.Key;
                    var flags = updated.Value;

                    if (_accounts.ContainsKey(id))
                    {
                        _accounts[id] = flags;
                    }
                }
            }
        }
コード例 #12
0
        public async Task QuerySubscriptions()
        {
            if (_subBusy)
            {
                return;
            }

            _subBusy = true;
            var lastTransactionInfo = (await Fan.DownloadFanofLastTransactionInfo(ServiceNode.Client, ChainType.Data, ServiceNode.ChainId, StatusServiceInfo.FanChainIndex, ServiceNode.AccountId))?.Item;

            if (lastTransactionInfo == null)
            {
                goto end;
            }

            var download = false;

            if (_subscriptionLastTransaction == null)
            {
                download = true;
            }
            else
            {
                if (lastTransactionInfo.TransactionId > _subscriptionLastTransaction.TransactionId)
                {
                    download = true;
                }
            }

            if (download)
            {
                var fanInfo = (await Fan.DownloadFanOf(ServiceNode.Client, ChainType.Data, ServiceNode.ChainId, StatusServiceInfo.FanChainIndex, ServiceNode.AccountId))?.Item;
                if (fanInfo == null)
                {
                    goto end;
                }

                _subscriptionLastTransaction = lastTransactionInfo;

                await _subscriptions.ProcessSubscriptions(fanInfo);
                await QueryMissingProfiles();

                await SaveAsync();

                //await ServiceNode.TransactionDownloadManager.UpdateLastAccess(id);
            }

end:
            _subBusy = false;
        }
コード例 #13
0
        public GroupAdministrationInfo(Unpacker unpacker)
        {
            unpacker.Unpack(out GroupId);
            unpacker.Unpack(out AccountId);
            unpacker.Unpack(out TransactionId);
            AdministrationLastTransactionInfo = new LastTransactionInfo(unpacker);
            Flags = (GroupFlags)unpacker.UnpackUInt();

            var count = unpacker.UnpackInt();

            for (var i = 0; i < count; i++)
            {
                var id = unpacker.UnpackLong();
                _accounts[id] = (GroupAccountFlags)unpacker.UnpackUInt();
            }

            count = unpacker.UnpackInt();
            for (var i = 0; i < count; i++)
            {
                var id = unpacker.UnpackLong();
                _pendingAccounts[id] = (GroupAccountFlags)unpacker.UnpackUInt();
            }
        }
コード例 #14
0
ファイル: Fan.cs プロジェクト: HeleusCore/Heleus.Base
 public FanInfo(long accountId, LastTransactionInfo lastTransactionInfo, List <long> fans)
 {
     AccountId           = accountId;
     LastTransactionInfo = lastTransactionInfo;
     Fans = fans;
 }
コード例 #15
0
ファイル: Fan.cs プロジェクト: HeleusCore/Heleus.Base
 public FanContainer(Feature feature, FeatureAccount featureAccount) : base(feature, featureAccount)
 {
     LastFansTransactionInfo  = LastTransactionInfo.Empty;
     LastFanOfTransactionInfo = LastTransactionInfo.Empty;
 }
コード例 #16
0
 public FriendContainer(Unpacker unpacker, ushort size, Feature feature, FeatureAccount featureAccount) : base(unpacker, size, feature, featureAccount)
 {
     unpacker.Unpack(_friends);
     unpacker.Unpack(_friendInvitations, (u) => new FriendInvitation(AccountId, unpacker));
     LastFriendTransactionInfo = new LastTransactionInfo(unpacker);
 }
コード例 #17
0
 public FriendContainer(Feature feature, FeatureAccount featureAccount) : base(feature, featureAccount)
 {
     LastFriendTransactionInfo = LastTransactionInfo.Empty;
 }
コード例 #18
0
ファイル: Fan.cs プロジェクト: HeleusCore/Heleus.Base
 public FanInfo(Unpacker unpacker)
 {
     unpacker.Unpack(out AccountId);
     LastTransactionInfo = new LastTransactionInfo(unpacker);
     Fans = unpacker.UnpackListLong();
 }