public async Task <FriendsPageModel> GetFriendsAsync(FriendsPageFilter filter)
        {
            var channel = new Channel(channelTarget, ChannelCredentials.Insecure);

            try
            {
                var client  = new FriendsGrpcService.FriendsGrpcServiceClient(channel);
                var request = new GetFriendsRequest()
                {
                    UserId    = filter.UserId.ToString(),
                    PageIndex = filter.PageIndex,
                    PageSize  = filter.PageSize
                };

                var response = await client.GetFriendsAsync(request);

                return(new FriendsPageModel()
                {
                    TotalNumber = response.TotalNumber,
                    Friends = response.Friends.Select(f => FriendGrpcConverter.ToModel(f)).ToList()
                });
            }
            finally
            {
                await channel.ShutdownAsync();
            }
        }
Exemple #2
0
        private void updateSearch()
        {
            queryChangedDebounce?.Cancel();

            if (!IsLoaded)
            {
                return;
            }

            Users = null;
            clearPanels();
            loading.Hide();
            getUsersRequest?.Cancel();

            if (api?.IsLoggedIn != true)
            {
                return;
            }

            switch (Header.Tabs.Current.Value)
            {
            case SocialTab.Friends:
                var friendRequest = new GetFriendsRequest();     // TODO filter arguments?
                friendRequest.Success    += updateUsers;
                api.Queue(getUsersRequest = friendRequest);
                break;

            default:
                var userRequest = new GetUsersRequest();     // TODO filter arguments!
                userRequest.Success      += response => updateUsers(response.Select(r => r.User));
                api.Queue(getUsersRequest = userRequest);
                break;
            }
            loading.Show();
        }
Exemple #3
0
 public async Task <BaseResponse <IEnumerable <UserInfo> > > GetFriends([FromQuery] GetFriendsRequest request)
 {
     return(new BaseSuccessResponse <IEnumerable <UserInfo> >
     {
         Data = await _userSource.GetUserFriends(request.UserId)
     });
 }
        public GetFriendsResponse GetFriends(GetFriendsRequest request)
        {
            var returnValue = new GetFriendsResponse();

            returnValue.Friends = _friendSqlClient.GetFriends();

            return(returnValue);
        }
        /// <summary>
        /// Подгружает следующую порцию элементов.
        /// </summary>
        /// <param name="count">Количество элементов, которое необходимо подгрузить.</param>
        public IAsyncOperation <LoadMoreItemsResult> LoadMoreItemsAsync(uint count)
        {
            return(Task.Run(async() =>
            {
                HasMoreItems = false;
                State = ContentState.Loading;
                uint resultCount = 0;

                if (count < 10)
                {
                    count = 50;
                }
                else if (count > 6000)
                {
                    count = 6000;
                }

                var request = new GetFriendsRequest()
                {
                    Count = count, Offset = _count, UserID = _userID
                };
                var response = await request.ExecuteAsync();

                await CoreHelper.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    if (response.Error.ErrorType == VKErrors.None)
                    {
                        _totalCount = response.Response.Count;
                        resultCount = (uint)response.Response.Items.Count;

                        for (int i = 0; i < response.Response.Items.Count; i++)
                        {
                            Add(response.Response.Items[i]);
                        }

                        _count += count;

                        if (Count > 0)
                        {
                            State = ContentState.Normal;
                            HasMoreItems = _count < _totalCount;
                        }
                        else
                        {
                            State = ContentState.NoData;
                        }
                    }
                    else
                    {
                        State = ContentState.Error;
                    }
                });

                return new LoadMoreItemsResult {
                    Count = resultCount
                };
            }).AsAsyncOperation());
        }
        public static GetFriendsReply GetFriends()
        {
            ILJGetFriends     getFriendsProxy = CreateProxy <ILJGetFriends>();
            GetFriendsRequest request         = new GetFriendsRequest(true, true);

            request.PopulateWithLoginInfo();
            GetFriendsReply reply = getFriendsProxy.GetFriends(request);

            reply.PostProcess();

            return(reply);
        }
        static void Main()
        {
            var accessToken = GetAccessToken();

            var client  = new RenrenClient(CONSUMER_KEY, CONSUMER_SECRET, accessToken);
            var gfr     = new GetFriendsRequest();
            var friends = client.Query <List <FriendInfoEntity> >(gfr);

            foreach (var f in friends)
            {
                Console.WriteLine(f.Name);
            }
        }
        static void Main()
        {
            var accessToken = GetAccessToken();

            var client = new RenrenClient(CONSUMER_KEY, CONSUMER_SECRET, accessToken);
            var gfr = new GetFriendsRequest();
            var friends = client.Query<List<FriendInfoEntity>>(gfr);

            foreach (var f in friends)
            {
                Console.WriteLine(f.Name);
            }
        }
Exemple #9
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            if (GlobalResourceManager.CurrentUser == null)
            {
                MessageBoxEx.Show("请先登录");
                new LoginForm().ShowDialog();
                return;
            }

            // 启动心跳线程
            ThreadPool.QueueUserWorkItem(HeartbeatThread, null);

            ProtocolDecoder.Singleton.OnGetFriendsResponse += OnGetFriendsResponse;
            ProtocolDecoder.Singleton.OnChangeStatusNotice += OnChangeStatusNotice;
            ProtocolDecoder.Singleton.OnFriendChatNotice   += OnFriendChatNotice;

            ChatListItem itemFriend = new ChatListItem("我的好友");

            chatListBox1.Items.Add(itemFriend);
            itemFriend.IsOpen = true;

            User user = new User();

            user.UserID    = "SystemGroupChat";
            user.NickName  = "群聊";
            user.Signature = "一起来聊天吧!";
            AppendUserToList(user);

            labelName.Text      = GlobalResourceManager.CurrentUser.NickName;
            labelSignature.Text = GlobalResourceManager.CurrentUser.Signature;
            // 下载头像
            String headFile = Path.Combine(GlobalResourceManager.AppPath, GlobalResourceManager.CurrentUser.UserID, "res", "head.jpg");

            Utils.DownFile(GlobalResourceManager.CurrentUser.HeadImageUrl, headFile);
            if (File.Exists(headFile))
            {
                skinButton_headImage.Image = Image.FromFile(headFile);
            }
            AppendUserToList(GlobalResourceManager.CurrentUser);

            GetFriendsRequest getFriendsRequest = new GetFriendsRequest();

            getFriendsRequest.UserID = GlobalResourceManager.CurrentUser.UserID;
            TCPClient.Singleton.SendProtoMessage(CMD.GetFriendsRequestCMD, getFriendsRequest);
        }
Exemple #10
0
        public override Task <GetFriendsResponse> GetFriends(GetFriendsRequest request, ServerCallContext context)
        {
            var filter = new FriendsPageFilter()
            {
                UserId    = Guid.Parse(request.UserId),
                PageIndex = request.PageIndex,
                PageSize  = request.PageSize
            };

            var(totalNumber, friends) = _friendsService.GetFriends(filter);
            var response = new GetFriendsResponse()
            {
                TotalNumber = totalNumber
            };

            response.Friends.AddRange(friends.Select(f => FriendGrpcConverter.ToMessage(f)).ToList());
            return(Task.FromResult(response));
        }
        public async Task <List <FriendInfo> > GetFriendsAsync(string socialNetwork, ApiOptions options = null)
        {
            if (string.IsNullOrWhiteSpace(socialNetwork) == true)
            {
                throw new AppacitiveRuntimeException("Social network cannot be null or empty.");
            }
            var request = new GetFriendsRequest
            {
                UserId        = this.Id,
                SocialNetwork = socialNetwork
            };

            ApiOptions.Apply(request, options);
            var response = await request.ExecuteAsync();

            if (response.Status.IsSuccessful == false)
            {
                throw response.Status.ToFault();
            }
            return(response.Friends);
        }
Exemple #12
0
        private void run()
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                switch (State.Value)
                {
                case APIState.Failing:
                    //todo: replace this with a ping request.
                    log.Add(@"In a failing state, waiting a bit before we try again...");
                    Thread.Sleep(5000);

                    if (!IsLoggedIn)
                    {
                        goto case APIState.Connecting;
                    }

                    if (queue.Count == 0)
                    {
                        log.Add(@"Queueing a ping request");
                        Queue(new GetUserRequest());
                    }

                    break;

                case APIState.Offline:
                case APIState.Connecting:
                    // work to restore a connection...
                    if (!HasLogin)
                    {
                        state.Value = APIState.Offline;
                        Thread.Sleep(50);
                        continue;
                    }

                    state.Value = APIState.Connecting;

                    // save the username at this point, if the user requested for it to be.
                    config.Set(OsuSetting.Username, config.Get <bool>(OsuSetting.SaveUsername) ? ProvidedUsername : string.Empty);

                    if (!authentication.HasValidAccessToken && !authentication.AuthenticateWithLogin(ProvidedUsername, password))
                    {
                        //todo: this fails even on network-related issues. we should probably handle those differently.
                        //NotificationOverlay.ShowMessage("Login failed!");
                        log.Add(@"Login failed!");
                        password = null;
                        authentication.Clear();
                        continue;
                    }

                    var userReq = new GetUserRequest();

                    userReq.Success += u =>
                    {
                        localUser.Value = u;

                        // todo: save/pull from settings
                        localUser.Value.Status.Value = new UserStatusOnline();

                        failureCount = 0;
                    };

                    if (!handleRequest(userReq))
                    {
                        failConnectionProcess();
                        continue;
                    }

                    // getting user's friends is considered part of the connection process.
                    var friendsReq = new GetFriendsRequest();

                    friendsReq.Success += res =>
                    {
                        friends.AddRange(res);

                        //we're connected!
                        state.Value = APIState.Online;
                    };

                    if (!handleRequest(friendsReq))
                    {
                        failConnectionProcess();
                        continue;
                    }

                    // The Success callback event is fired on the main thread, so we should wait for that to run before proceeding.
                    // Without this, we will end up circulating this Connecting loop multiple times and queueing up many web requests
                    // before actually going online.
                    while (State.Value > APIState.Offline && State.Value < APIState.Online)
                    {
                        Thread.Sleep(500);
                    }

                    break;
                }

                // hard bail if we can't get a valid access token.
                if (authentication.RequestAccessToken() == null)
                {
                    Logout();
                    continue;
                }

                while (true)
                {
                    APIRequest req;

                    lock (queue)
                    {
                        if (queue.Count == 0)
                        {
                            break;
                        }

                        req = queue.Dequeue();
                    }

                    handleRequest(req);
                }

                Thread.Sleep(50);
            }

            void failConnectionProcess()
            {
                // if something went wrong during the connection process, we want to reset the state (but only if still connecting).
                if (State.Value == APIState.Connecting)
                {
                    state.Value = APIState.Failing;
                }
            }
        }
 public async Task<List<FriendInfo>> GetFriendsAsync(string socialNetwork, ApiOptions options = null)
 {
     if (string.IsNullOrWhiteSpace(socialNetwork) == true)
         throw new AppacitiveRuntimeException("Social network cannot be null or empty.");
     var request = new GetFriendsRequest
     {
         UserId = this.Id,
         SocialNetwork = socialNetwork
     };
     ApiOptions.Apply(request, options);
     var response = await request.ExecuteAsync();
     if (response.Status.IsSuccessful == false)
         throw response.Status.ToFault();
     return response.Friends;
 }