Ejemplo n.º 1
0
        private void OnPICSChanges(SteamApps.PICSChangesCallback callback)
        {
            if (PreviousChangeNumber == callback.CurrentChangeNumber)
            {
                return;
            }

            Bootstrap.Log("Changelist {0} -> {1} ({2} apps, {3} packages)", PreviousChangeNumber, callback.CurrentChangeNumber, callback.AppChanges.Count, callback.PackageChanges.Count);

            PreviousChangeNumber = callback.CurrentChangeNumber;

            // Group apps and package changes by changelist, this will seperate into individual changelists
            var appGrouping     = callback.AppChanges.Values.GroupBy(a => a.ChangeNumber);
            var packageGrouping = callback.PackageChanges.Values.GroupBy(p => p.ChangeNumber);

            // Join apps and packages back together based on changelist number
            var changeLists = Utils.FullOuterJoin(appGrouping, packageGrouping, a => a.Key, p => p.Key, (a, p, key) => new SteamChangelist
            {
                ChangeNumber = key,

                Apps     = a.Select(x => x.ID),
                Packages = p.Select(x => x.ID),
            },
                                                  new EmptyGrouping <uint, SteamApps.PICSChangesCallback.PICSChangeData>(),
                                                  new EmptyGrouping <uint, SteamApps.PICSChangesCallback.PICSChangeData>())
                              .OrderBy(c => c.ChangeNumber);

            foreach (var changeList in changeLists)
            {
                Bootstrap.Broadcast(new ChangelistEvent(changeList));
            }

            Bootstrap.SendAppsToSubscribers(callback.AppChanges);
        }
Ejemplo n.º 2
0
        private async Task ChangesTick()
        {
            var currentHash = TickerHash;
            var random      = new Random();

            if (currentHash == 0)
            {
                Bootstrap.Log("Waiting a minute before requesting changes, to give a chance for users to reconnect");
                await Task.Delay(60000 + random.Next(10000));
            }
            else
            {
                Bootstrap.Log($"PICS ticker started #{currentHash}");
            }

            while (currentHash == TickerHash)
            {
                try
                {
                    await Apps.PICSGetChangesSince(PreviousChangeNumber, true, true);
                }
                catch (OperationCanceledException)
                {
                    Bootstrap.Log("PICSGetChangesSince task was cancelled");
                }
                catch (AsyncJobFailedException)
                {
                    Bootstrap.Log("PICSGetChangesSince async job failed");
                }

                await Task.Delay(random.Next(3210));
            }

            Bootstrap.Log($"PICS ticker stopped #{currentHash}");
        }
Ejemplo n.º 3
0
        private async Task ChangesTick()
        {
            var currentHash = TickerHash;
            var random      = new Random();

            if (currentHash == 0)
            {
                Bootstrap.Log("Waiting a minute before requesting changes, to give a chance for users to reconnect");
                await Task.Delay(60000 + random.Next(10000));
            }
            else
            {
                Bootstrap.Log($"PICS ticker started #{currentHash}");
            }

            while (currentHash == TickerHash)
            {
                try
                {
                    await Apps.PICSGetChangesSince(PreviousChangeNumber, true, true);
                }
                catch (Exception e)
                {
                    Bootstrap.Log($"PICSGetChangesSince: {e.GetType().Name}: {e.Message}");
                }

                await Task.Delay(random.Next(3210));
            }

            Bootstrap.Log($"PICS ticker stopped #{currentHash}");
        }
Ejemplo n.º 4
0
        private void OnLoggedOff(SteamUser.LoggedOffCallback callback)
        {
            if (IsLoggedOn)
            {
                Bootstrap.Broadcast(new LogOffEvent());

                IsLoggedOn = false;
            }

            Bootstrap.Log("Logged off from Steam");
        }
Ejemplo n.º 5
0
        private void OnConnected(SteamClient.ConnectedCallback callback)
        {
            if (callback.Result != EResult.OK)
            {
                Bootstrap.Log("Could not connect to Steam: {0}", callback.Result);

                IsRunning = false;

                return;
            }

            Bootstrap.Log("Connected to Steam, logging in...");

            User.LogOnAnonymous();
        }
Ejemplo n.º 6
0
        private void OnLoggedOn(SteamUser.LoggedOnCallback callback)
        {
            if (callback.Result != EResult.OK)
            {
                Bootstrap.Log("Failed to login: {0}", callback.Result);

                Thread.Sleep(TimeSpan.FromSeconds(2));

                return;
            }

            IsLoggedOn = true;

            Bootstrap.Broadcast(new LogOnEvent());

            Bootstrap.Log("Logged in, current valve time is {0} UTC", callback.ServerTime);
        }
Ejemplo n.º 7
0
        private void OnDisconnected(SteamClient.DisconnectedCallback callback)
        {
            if (!IsRunning)
            {
                Bootstrap.Log("Shutting down...");

                return;
            }

            if (IsLoggedOn)
            {
                Bootstrap.Broadcast(new LogOffEvent());

                IsLoggedOn = false;
            }

            Bootstrap.Log("Disconnected from Steam. Retrying...");

            Thread.Sleep(TimeSpan.FromSeconds(15));

            Client.Connect();
        }
Ejemplo n.º 8
0
        public ChangelistEvent(SteamChangelist changelist)
            : base("Changelist")
        {
            ChangeNumber = changelist.ChangeNumber;

            if (changelist.Apps.Any())
            {
                Apps = changelist.Apps.ToDictionary(x => x, x => "Unknown App " + x);

                if (Bootstrap.Config.DatabaseConnectionString != null)
                {
                    try
                    {
                        using var db = new MySqlConnection(Bootstrap.Config.DatabaseConnectionString);

                        foreach (var app in db.Query <AppData>("SELECT `AppID`, `Name`, `LastKnownName` FROM `Apps` WHERE `AppID` IN @Apps", new { changelist.Apps }))
                        {
                            if (!string.IsNullOrEmpty(app.LastKnownName) && app.Name != app.LastKnownName)
                            {
                                Apps[app.AppID] = $"{app.Name} ({app.LastKnownName})";
                            }
                            else
                            {
                                Apps[app.AppID] = app.Name;
                            }
                        }
                    }
                    catch (MySqlException e)
                    {
                        Bootstrap.Log("{0}", e.Message);
                    }
                }
            }
            else
            {
                Apps = new Dictionary <uint, string>();
            }

            if (changelist.Packages.Any())
            {
                Packages = changelist.Packages.ToDictionary(x => x, x => "Unknown Package " + x);

                if (Bootstrap.Config.DatabaseConnectionString != null)
                {
                    try
                    {
                        using var db = new MySqlConnection(Bootstrap.Config.DatabaseConnectionString);

                        foreach (var sub in db.Query <PackageData>("SELECT `SubID`, `LastKnownName` FROM `Subs` WHERE `SubID` IN @Packages", new { changelist.Packages }))
                        {
                            Packages[sub.SubID] = sub.LastKnownName;
                        }
                    }
                    catch (MySqlException e)
                    {
                        Bootstrap.Log("{0}", e.Message);
                    }
                }
            }
            else
            {
                Packages = new Dictionary <uint, string>();
            }
        }
Ejemplo n.º 9
0
        private void OnConnected(SteamClient.ConnectedCallback callback)
        {
            Bootstrap.Log("Connected to Steam, logging in...");

            User.LogOnAnonymous();
        }
Ejemplo n.º 10
0
 public void WriteLine(string category, string msg)
 {
     Bootstrap.Log("[SteamKit] {0} {1}", category, msg);
 }
Ejemplo n.º 11
0
        public ChangelistEvent(SteamChangelist changelist)
            : base("Changelist")
        {
            ChangeNumber = changelist.ChangeNumber;

            if (changelist.Apps.Any())
            {
                Apps = changelist.Apps.ToDictionary(x => x, x => "Unknown App " + x);

                if (Bootstrap.DatabaseConnectionString != null)
                {
                    try
                    {
                        var apps = string.Join(",", changelist.Apps);

                        using (var reader = MySqlHelper.ExecuteReader(Bootstrap.DatabaseConnectionString, "SELECT `AppID`, `Name`, `LastKnownName` FROM `Apps` WHERE `AppID` IN(" + apps + ")"))
                        {
                            while (reader.Read())
                            {
                                var name          = reader.GetString(1);
                                var lastKnownName = reader.GetString(2);

                                if (!string.IsNullOrEmpty(lastKnownName) && name != lastKnownName)
                                {
                                    name = string.Format("{0} ({1})", name, lastKnownName);
                                }

                                Apps[reader.GetUInt32(0)] = name;
                            }
                        }
                    }
                    catch (MySqlException e)
                    {
                        Bootstrap.Log("{0}", e.Message);
                    }
                }
            }
            else
            {
                Apps = new Dictionary <uint, string>();
            }

            if (changelist.Packages.Any())
            {
                Packages = changelist.Packages.ToDictionary(x => x, x => "Unknown Package " + x);

                if (Bootstrap.DatabaseConnectionString != null)
                {
                    try
                    {
                        var subs = string.Join(",", changelist.Packages);

                        using (var reader = MySqlHelper.ExecuteReader(Bootstrap.DatabaseConnectionString, "SELECT `SubID`, `LastKnownName` FROM `Subs` WHERE `SubID` IN(" + subs + ")"))
                        {
                            while (reader.Read())
                            {
                                Packages[reader.GetUInt32(0)] = reader.GetString(1);
                            }
                        }
                    }
                    catch (MySqlException e)
                    {
                        Bootstrap.Log("{0}", e.Message);
                    }
                }
            }
            else
            {
                Packages = new Dictionary <uint, string>();
            }
        }