Как получить значение SteamKit2.SteamFriends.ProfileInfoCallback?

zebniq

Здравствуйте, я новичок в C#. Поэтому мне нужна небольшая помощь. Есть некий АПИ и я пишу для него приложение.Итак.
//
        // Сводка:
        //     Requests profile information for the given SteamKit2.SteamID.  Results are
        //     returned in a SteamKit2.SteamFriends.ProfileInfoCallback.
        //
        // Параметры:
        //   steamId:
        //     The SteamID of the friend to request the details of.
        //
        // Возвращает:
        //     The Job ID of the request. This can be used to find the appropriate SteamKit2.SteamClient.JobCallback<T>.
        public JobID RequestProfileInfo(SteamID steamId);
// Сводка:
        //     This callback is fired in response to requesting profile info for a user.
        public sealed class ProfileInfoCallback : CallbackMsg
        {
            // Сводка:
            //     Gets the name of the city.
            public string CityName { get; }
            //
            // Сводка:
            //     Gets the name of the country.
            public string CountryName { get; }
            //
            // Сводка:
            //     Gets the headline.
            public string Headline { get; }
            //
            // Сводка:
            //     Gets the real name.
            public string RealName { get; }
            //
            // Сводка:
            //     Gets the recent playtime.
            [Obsolete("This property is obsolete as this value is no longer returned by Steam.")]
            public TimeSpan RecentPlaytime { get; }
            //
            // Сводка:
            //     Gets the result of requesting profile info.
            public EResult Result { get; }
            //
            // Сводка:
            //     Gets the name of the state.
            public string StateName { get; }
            //
            // Сводка:
            //     Gets the SteamKit2.SteamFriends.ProfileInfoCallback.SteamID this info belongs
            //     to.
            public SteamID SteamID { get; }
            //
            // Сводка:
            //     Gets the summary.
            public string Summary { get; }
            //
            // Сводка:
            //     Gets the time this account was created.
            public DateTime TimeCreated { get; }
        }
Я вызываю функцию Bot.SteamFriends.RequestProfileInfo(id);Как мне теперь получить CityName? Написано Results are returned in a SteamKit2.SteamFriends.ProfileInfoCallbackНо как мне получить эти значения в переменную?
10 ответов

zebniq

как мне получить эти значения в переменную?
var result = Bot.SteamFriends.RequestProfileInfo(id);


zebniq

var result = Bot.SteamFriends.RequestProfileInfo(id);
а какого типа тогда будет result? просто пробую так делать. Там число, а должны быть стоки, или класс.


zebniq

Исполни код и посмотри тип который приобретет переменная result. Но как я понял он будет ProfileInfoCallback.


zebniq

Нет, дело в том, что Bot.SteamFriends.RequestProfileInfo(id) вернёт вам JobID, то есть идентификатор работы. Я думаю, что вы уже поняли, что вся архитектура SteamKit основана на обратных вызовах (callback), таким образом сначала нужно зарегистрировать колбэк на SteamKit2.SteamFriends.ProfileInfoCallback, например:
//OnProfileInfo - функция, которая будет вызвана, manager - мэнеджер колбэков
new Callback<SteamKit2.SteamFriends.ProfileInfoCallback>( OnProfileInfo, manager );
А потом уже вызывать ваш код, то есть
Bot.SteamFriends.RequestProfileInfo(id);
Когда данные о профиле будут получены от серверов Steam, будет вызвана функция OnProfileInfo, ссылку на которую мы указали выше.


zebniq

Waveform, Я не до конца понимаю, почему мне нужна ещё какая-то функция OnProfileInfo? То есть, что мне в ней написать, если я хочу просто получить строку от сервера? Конкретно обработчик ответа? По поводу менеджера, его тоже нужно объявлять? типа:
static CallbackManager manager;
это делать снаружи функции?


zebniq

zebniq, просто строку вы не получите, вы получите объект-ответ типа ProfileInfoCallback. Да, мэнеджер нужно объявлять, более того, создать новый объект CallBackManager. Советую обратиться к примерам, которые лежат на гитхабе стимкита, в частности к примеру #2, где наглядно показано то, как работать с колбэками.


zebniq

Ух а вот за примеры огромное спасибо, я уже полдня их искал, как работать с колбеками, странно что не заметил, спасибо все большое за помощь. Постараюсь разобраться.Написал
 
msg.Handle<SteamClient.JobCallback<SteamFriends.ProfileInfoCallback>>(callback =>
            {
 
                log.Info("Profile: " + callback);
            });
 
Bot.SteamFriends.RequestProfileInfo(id);
и вижу в логе. Profile: SteamKit2.SteamClient+JobCallback`1[SteamKit2.SteamFriends+ProfileInfoCallback]блин) а как всё же данные вытащить??пробую, например, log.Info("Profile: " + callback.CityName);ругается


zebniq

zebniq, напишите callback. (обратите внимание на точку), а затем нажмите ctrl+space(контрол и пробел), вам подсветится, какие поля/свойства есть у этого объекта. Потому как
log.Info("Profile: " + callback);
аналогичен такому коду:
log.Info("Profile: " + callback.GetType().ToString());
что вы собственно и получаете.И если log.Info - это ваш класс/метод, то небольшой хинт: методы должны быть глаголами, а не существительными/прилагательными итд


zebniq

zebniq, попробуйте
log.Info("Profile: " + callback.Callback.CityName);


zebniq

Спасибо, все работает, я разобрался