Workaround for inconsistent authentication behavior

This commit is contained in:
barelyprofessional
2024-08-18 01:34:28 +08:00
parent 62375292e9
commit e31cf1245a

View File

@@ -20,6 +20,7 @@ public class Chipsgg : IDisposable
public event OnChipsggRecentBetEventHandler OnChipsggRecentBet; public event OnChipsggRecentBetEventHandler OnChipsggRecentBet;
private CancellationToken _cancellationToken = CancellationToken.None; private CancellationToken _cancellationToken = CancellationToken.None;
private Dictionary<string, ChipsggCurrencyModel> _currencies = new(); private Dictionary<string, ChipsggCurrencyModel> _currencies = new();
private bool _authenticated = false;
public Chipsgg(string? proxy = null, CancellationToken? cancellationToken = null) public Chipsgg(string? proxy = null, CancellationToken? cancellationToken = null)
{ {
@@ -119,8 +120,9 @@ public class Chipsgg : IDisposable
if (firstElement[1].GetInt32() == 1) if (firstElement[1].GetInt32() == 1)
{ {
var guid = firstElement[2].GetString(); var guid = firstElement[2].GetString();
_logger.Debug("Received auth packet, sending back GUID auth with " + guid); _logger.Info("Received auth packet, sending back GUID auth with " + guid);
_wsClient.Send("[\"auth\",2,\"authenticate\",[\"" + guid+ "\"]]"); _wsClient.Send("[\"auth\",2,\"authenticate\",[\"" + guid+ "\"]]");
_authenticated = true;
return; return;
} }
@@ -151,7 +153,13 @@ public class Chipsgg : IDisposable
throw new Exception("Caught a null when deserializing the path element of the array"); throw new Exception("Caught a null when deserializing the path element of the array");
if (path.Count == 0) if (path.Count == 0)
{ {
_logger.Debug("Received initial currency payload as the path array was empty"); if (!_authenticated)
{
_logger.Info("Received currency payload without getting the auth response. Retarded inconsistent Chips.gg behavior again, sending a made-up GUID");
var guid = Guid.NewGuid().ToString();
_wsClient.Send("[\"auth\",2,\"authenticate\",[\"" + guid+ "\"]]");
}
_logger.Info("Received initial currency payload as the path array was empty");
var currencyData = dataElement[1].Deserialize<Dictionary<string, JsonElement>>(); var currencyData = dataElement[1].Deserialize<Dictionary<string, JsonElement>>();
if (currencyData == null) throw new Exception("Caught a null when deserializing currency data"); if (currencyData == null) throw new Exception("Caught a null when deserializing currency data");
if (!currencyData.TryGetValue("currencies", out var val)) throw new Exception("Currency object didn't contain expected currencies property"); if (!currencyData.TryGetValue("currencies", out var val)) throw new Exception("Currency object didn't contain expected currencies property");
@@ -160,7 +168,11 @@ public class Chipsgg : IDisposable
foreach (var currency in currencies.Keys) foreach (var currency in currencies.Keys)
{ {
// Should never happen but you never know // Should never happen but you never know
if (_currencies.ContainsKey(currency)) return; if (_currencies.ContainsKey(currency))
{
_logger.Info("Ignoring already defined currency");
continue;
};
float? price = null; float? price = null;
// Where a price is not set, the element is simply missing // Where a price is not set, the element is simply missing
if (currencies[currency].TryGetProperty("price", out var priceElement)) if (currencies[currency].TryGetProperty("price", out var priceElement))
@@ -190,7 +202,11 @@ public class Chipsgg : IDisposable
if (innerDataPath == null || innerDataPath.Count == 0) throw new Exception("innerDataPath was null or contained no elements"); if (innerDataPath == null || innerDataPath.Count == 0) throw new Exception("innerDataPath was null or contained no elements");
if (innerDataPath.Contains("metrics")) continue; if (innerDataPath.Contains("metrics")) continue;
// No idea with koth is, so we'll ignore it // No idea with koth is, so we'll ignore it
if (innerDataPath[0] == "koth") return; if (innerDataPath[0] == "koth")
{
_logger.Debug("Ignoring packet as it contains koth");
return;
};
var currency = innerDataPath[1]; var currency = innerDataPath[1];
if (_currencies.TryGetValue(currency, out var updatedCurrency)) if (_currencies.TryGetValue(currency, out var updatedCurrency))
{ {
@@ -207,7 +223,11 @@ public class Chipsgg : IDisposable
if (firstElement[1].ValueKind == JsonValueKind.Number && firstElement[1].TryGetInt32(out var type)) if (firstElement[1].ValueKind == JsonValueKind.Number && firstElement[1].TryGetInt32(out var type))
{ {
// 12 is the replay of recent bets // 12 is the replay of recent bets
if (type == 12) return; if (type == 12)
{
_logger.Info("Ignoring replay of recent bets");
return;
};
} }
// Currency data may not be known until after so hold it here til we're done parsing // Currency data may not be known until after so hold it here til we're done parsing
var amount = string.Empty; var amount = string.Empty;
@@ -299,7 +319,11 @@ public class Chipsgg : IDisposable
// Just something that randomly happens where incomplete bets are sent // Just something that randomly happens where incomplete bets are sent
// It seems that occasionally a bet is sent through with no proper game title or username // It seems that occasionally a bet is sent through with no proper game title or username
// Since the feed in theory can't display these, I'm assuming it's another ghost and not a real bet // Since the feed in theory can't display these, I'm assuming it's another ghost and not a real bet
if (bet.Currency == null || bet.GameTitle == null) return; if (bet.Currency == null || bet.GameTitle == null)
{
_logger.Debug("Currency or GameTitle was null, ignoring");
return;
};
if (!_currencies.TryGetValue(bet.Currency, out var currencyData)) if (!_currencies.TryGetValue(bet.Currency, out var currencyData))
{ {
throw new Exception($"Unknown currency {bet.Currency}"); throw new Exception($"Unknown currency {bet.Currency}");
@@ -313,8 +337,8 @@ public class Chipsgg : IDisposable
OnChipsggRecentBet?.Invoke(this, bet); OnChipsggRecentBet?.Invoke(this, bet);
return; return;
} }
_logger.Debug("Unhandled event from Chips.gg"); _logger.Info("Unhandled event from Chips.gg");
_logger.Debug(message.Text); _logger.Info(message.Text);
} }
catch (Exception e) catch (Exception e)
{ {