Compare commits

...

12 Commits

Author SHA1 Message Date
JustArchi
a6a2e1605d Misc 2015-11-20 14:47:16 +01:00
JustArchi
c0c61913c2 Fix crash related to trading 2015-11-19 18:34:18 +01:00
JustArchi
fb2437d75d Code cleanup & improvements of previous pull request 2015-11-18 22:10:24 +01:00
Łukasz Domeradzki
499e55c473 Merge pull request #15 from Ryzhehvost/statusplus
added extended !status syntax
2015-11-18 21:59:40 +01:00
jogger
dfd4513b16 added extended !status syntax 2015-11-18 22:15:10 +02:00
JustArchi
f873da7236 Packages update 2015-11-18 14:49:31 +01:00
JustArchi
59360c5b60 Formatting is killing me 2015-11-18 14:30:05 +01:00
JustArchi
750c34189a General code review 2015-11-18 14:28:46 +01:00
JustArchi
7c3f5beb3a Hopefully fix all farming deadlocks, thanks to @Ryzhehvost, closes #14 2015-11-18 14:12:29 +01:00
JustArchi
8dfe095dae Misc 2015-11-15 21:57:46 +01:00
JustArchi
53022632e0 Misc 2015-11-15 17:06:26 +01:00
Łukasz Domeradzki
29a916e5ad Update README.md 2015-11-14 18:04:46 +01:00
33 changed files with 318 additions and 126 deletions

View File

@@ -52,10 +52,12 @@ namespace ArchiSteamFarm {
PurchaseResult = (EPurchaseResult) body.purchase_result_details;
using (MemoryStream ms = new MemoryStream(body.purchase_receipt_info)) {
if (ReceiptInfo.TryReadAsBinary(ms)) {
foreach (KeyValue lineItem in ReceiptInfo["lineitems"].Children) {
Items.Add((uint) lineItem["PackageID"].AsUnsignedLong(), lineItem["ItemDescription"].AsString());
}
if (!ReceiptInfo.TryReadAsBinary(ms)) {
return;
}
foreach (KeyValue lineItem in ReceiptInfo["lineitems"].Children) {
Items.Add((uint) lineItem["PackageID"].AsUnsignedLong(), lineItem["ItemDescription"].AsString());
}
}
}
@@ -91,11 +93,13 @@ namespace ArchiSteamFarm {
internal void PlayGames(params ulong[] gameIDs) {
var request = new ClientMsgProtobuf<CMsgClientGamesPlayed>(EMsg.ClientGamesPlayed);
foreach (ulong gameID in gameIDs) {
if (gameID != 0) {
request.Body.games_played.Add(new CMsgClientGamesPlayed.GamePlayed {
game_id = new GameID(gameID),
});
if (gameID == 0) {
continue;
}
request.Body.games_played.Add(new CMsgClientGamesPlayed.GamePlayed {
game_id = new GameID(gameID),
});
}
Client.Send(request);
}
@@ -108,15 +112,17 @@ namespace ArchiSteamFarm {
}
public sealed override void HandleMsg(IPacketMsg packetMsg) {
if (packetMsg != null) {
switch (packetMsg.MsgType) {
case EMsg.ClientPurchaseResponse:
HandlePurchaseResponse(packetMsg);
break;
case EMsg.ClientUserNotifications:
HandleUserNotifications(packetMsg);
break;
}
if (packetMsg == null) {
return;
}
switch (packetMsg.MsgType) {
case EMsg.ClientPurchaseResponse:
HandlePurchaseResponse(packetMsg);
break;
case EMsg.ClientUserNotifications:
HandleUserNotifications(packetMsg);
break;
}
}

View File

@@ -63,7 +63,7 @@
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.8.0.1-beta1\lib\net45\Newtonsoft.Json.dll</HintPath>
<HintPath>..\packages\Newtonsoft.Json.8.0.1-beta2\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="protobuf-net, Version=2.0.0.668, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">

View File

@@ -34,13 +34,14 @@ using System.Threading.Tasks;
namespace ArchiSteamFarm {
internal class ArchiWebHandler {
private const int Timeout = 1000 * 15; // In miliseconds
private const int Timeout = 1000 * 30; // In miliseconds
private readonly Bot Bot;
private readonly string ApiKey;
private readonly Dictionary<string, string> SteamCookieDictionary = new Dictionary<string, string>();
private ulong SteamID;
private string VanityURL;
private readonly Dictionary<string, string> SteamCookieDictionary = new Dictionary<string, string>();
// This is required because home_process request must be done on final URL
private string GetHomeProcess() {
@@ -282,6 +283,10 @@ namespace ArchiSteamFarm {
};
HttpResponseMessage result = await Utilities.UrlPostRequestWithResponse(request, postData, SteamCookieDictionary, referer).ConfigureAwait(false);
if (result == null) {
return false;
}
bool success = result.IsSuccessStatusCode;
if (!success) {

71
ArchiSteamFarm/Bot.cs Normal file → Executable file
View File

@@ -24,6 +24,7 @@
using SteamKit2;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
@@ -34,16 +35,15 @@ namespace ArchiSteamFarm {
internal class Bot {
private const ushort CallbackSleep = 500; // In miliseconds
private static readonly Dictionary<string, Bot> Bots = new Dictionary<string, Bot>();
private static readonly ConcurrentDictionary<string, Bot> Bots = new ConcurrentDictionary<string, Bot>();
private readonly string ConfigFile;
private readonly string SentryFile;
private readonly string ConfigFile, SentryFile;
internal readonly string BotName;
private bool IsRunning = false;
private string AuthCode, TwoFactorAuth;
internal readonly string BotName;
internal ArchiHandler ArchiHandler { get; private set; }
internal ArchiWebHandler ArchiWebHandler { get; private set; }
internal CallbackManager CallbackManager { get; private set; }
@@ -67,19 +67,13 @@ namespace ArchiSteamFarm {
internal bool Statistics { get; private set; } = true;
internal static int GetRunningBotsCount() {
int result;
lock (Bots) {
result = Bots.Count;
}
return result;
return Bots.Count;
}
internal static async Task ShutdownAllBots() {
List<Task> tasks = new List<Task>();
lock (Bots) {
foreach (Bot bot in Bots.Values) {
tasks.Add(Task.Run(async () => await bot.Shutdown().ConfigureAwait(false)));
}
foreach (Bot bot in Bots.Values) {
tasks.Add(Task.Run(async () => await bot.Shutdown().ConfigureAwait(false)));
}
await Task.WhenAll(tasks).ConfigureAwait(false);
}
@@ -102,9 +96,7 @@ namespace ArchiSteamFarm {
return;
}
lock (Bots) {
Bots.Add(BotName, this);
}
Bots.AddOrUpdate(BotName, this, (key, value) => this);
// Initialize
SteamClient = new SteamClient();
@@ -119,7 +111,6 @@ namespace ArchiSteamFarm {
SteamFriends = SteamClient.GetHandler<SteamFriends>();
CallbackManager.Subscribe<SteamFriends.FriendsListCallback>(OnFriendsList);
CallbackManager.Subscribe<SteamFriends.FriendMsgCallback>(OnFriendMsg);
CallbackManager.Subscribe<SteamFriends.PersonaStateCallback>(OnPersonaState);
SteamUser = SteamClient.GetHandler<SteamUser>();
CallbackManager.Subscribe<SteamUser.AccountInfoCallback>(OnAccountInfo);
@@ -203,7 +194,7 @@ namespace ArchiSteamFarm {
}
}
}
} catch (XmlException e) {
} catch (Exception e) {
Logging.LogGenericException(BotName, e);
Logging.LogGenericError(BotName, "Your config for this bot instance is invalid, it won't run!");
return false;
@@ -243,9 +234,7 @@ namespace ArchiSteamFarm {
}
await botToShutdown.Stop().ConfigureAwait(false);
lock (Bots) {
Bots.Remove(botNameToShutdown);
}
Bots.TryRemove(botNameToShutdown, out botToShutdown);
Program.OnBotShutdown(botToShutdown);
return true;
@@ -281,12 +270,25 @@ namespace ArchiSteamFarm {
}
private void ResponseStatus(ulong steamID) {
private void ResponseStatus(ulong steamID, string botName = null) {
if (steamID == 0) {
return;
}
Bot bot;
if (string.IsNullOrEmpty(botName)) {
bot = this;
} else {
if (!Bots.TryGetValue(botName, out bot)) {
SendMessageToUser(steamID, "Couldn't find any bot named " + botName + "!");
return;
}
}
if (bot.CardsFarmer.CurrentGame > 0) {
SendMessageToUser(steamID, "Bot " + bot.BotName + " is currently farming appID " + bot.CardsFarmer.CurrentGame + " and has total of " + bot.CardsFarmer.GamesLeft + " games left to farm");
}
SendMessageToUser(steamID, "Currently " + Bots.Count + " bots are running");
}
@@ -395,7 +397,7 @@ namespace ArchiSteamFarm {
SteamID steamID = friend.SteamID;
switch (steamID.AccountType) {
case EAccountType.Clan:
//ArchiHandler.AcceptClanInvite(steamID);
ArchiHandler.DeclineClanInvite(steamID);
break;
default:
if (steamID == SteamMasterID) {
@@ -442,6 +444,7 @@ namespace ArchiSteamFarm {
await ShutdownAllBots().ConfigureAwait(false);
break;
case "!farm":
SendMessageToUser(steamID, "Please wait...");
await CardsFarmer.StartFarming().ConfigureAwait(false);
SendMessageToUser(steamID, "Done!");
break;
@@ -458,28 +461,22 @@ namespace ArchiSteamFarm {
} else {
string[] args = message.Split(' ');
switch (args[0]) {
case "!redeem":
ArchiHandler.RedeemKey(args[1]);
break;
case "!start":
ResponseStart(steamID, args[1]);
break;
case "!stop":
await ResponseStop(steamID, args[1]).ConfigureAwait(false);
break;
case "!status":
ResponseStatus(steamID, args[1]);
break;
}
}
}
private void OnPersonaState(SteamFriends.PersonaStateCallback callback) {
if (callback == null) {
return;
}
SteamID steamID = callback.FriendID;
SteamID sourceSteamID = callback.SourceSteamID;
string steamNickname = callback.Name;
EPersonaState personaState = callback.State;
EClanRank clanRank = (EClanRank) callback.ClanRank;
}
private void OnAccountInfo(SteamUser.AccountInfoCallback callback) {
if (callback == null) {
return;

View File

@@ -27,28 +27,21 @@ using SteamKit2.Internal;
using System.IO;
namespace ArchiSteamFarm {
/// <summary>
/// Message used to Accept or Decline a group(clan) invite.
/// </summary>
internal sealed class CMsgClientClanInviteAction : ISteamSerializableMessage, ISteamSerializable {
EMsg ISteamSerializableMessage.GetEMsg() {
return EMsg.ClientAcknowledgeClanInvite;
}
public CMsgClientClanInviteAction() {
}
/// <summary>
/// Group invited to.
/// </summary>
internal ulong GroupID = 0;
/// <summary>
/// To accept or decline the invite.
/// </summary>
internal bool AcceptInvite = true;
public CMsgClientClanInviteAction() { }
void ISteamSerializable.Serialize(Stream stream) {
if (stream == null) {
return;
}
try {
BinaryWriter binaryWriter = new BinaryWriter(stream);
binaryWriter.Write(GroupID);
@@ -59,6 +52,10 @@ namespace ArchiSteamFarm {
}
void ISteamSerializable.Deserialize(Stream stream) {
if (stream == null) {
return;
}
try {
BinaryReader binaryReader = new BinaryReader(stream);
GroupID = binaryReader.ReadUInt64();

30
ArchiSteamFarm/CardsFarmer.cs Normal file → Executable file
View File

@@ -35,6 +35,9 @@ namespace ArchiSteamFarm {
private readonly SemaphoreSlim Semaphore = new SemaphoreSlim(1);
private readonly Bot Bot;
internal uint CurrentGame { get; private set; } = 0;
internal int GamesLeft { get; private set; } = 0;
private volatile bool NowFarming = false;
internal CardsFarmer(Bot bot) {
@@ -105,17 +108,30 @@ namespace ArchiSteamFarm {
}
}
Logging.LogGenericInfo(Bot.BotName, "Farming in progress...");
NowFarming = appIDs.Count > 0;
Semaphore.Release();
GamesLeft = appIDs.Count;
// Start farming
while (appIDs.Count > 0) {
Logging.LogGenericInfo(Bot.BotName, "Farming in progress...");
uint appID = appIDs[0];
CurrentGame = appID;
Logging.LogGenericInfo(Bot.BotName, "Now farming: " + appID);
if (await Farm(appID).ConfigureAwait(false)) {
appIDs.Remove(appID);
GamesLeft--;
} else {
GamesLeft = 0;
CurrentGame = 0;
NowFarming = false;
return;
}
}
CurrentGame = 0;
NowFarming = false;
Logging.LogGenericInfo(Bot.BotName, "Farming finished!");
await Bot.OnFarmingFinished().ConfigureAwait(false);
}
@@ -152,17 +168,12 @@ namespace ArchiSteamFarm {
}
private async Task<bool> Farm(ulong appID) {
Bot.PlayGame(appID);
bool success = true;
bool? keepFarming = await ShouldFarm(appID).ConfigureAwait(false);
while (keepFarming == null || keepFarming.Value) {
if (!NowFarming) {
NowFarming = true;
Logging.LogGenericInfo(Bot.BotName, "Now farming: " + appID);
Bot.PlayGame(appID);
Semaphore.Release(); // We're farming, allow other tasks to shut us down
} else {
Logging.LogGenericInfo(Bot.BotName, "Still farming: " + appID);
}
Logging.LogGenericInfo(Bot.BotName, "Still farming: " + appID);
if (FarmResetEvent.WaitOne(1000 * 60 * StatusCheckSleep)) {
success = false;
break;
@@ -171,7 +182,6 @@ namespace ArchiSteamFarm {
}
Bot.PlayGame(0);
NowFarming = false;
Logging.LogGenericInfo(Bot.BotName, "Stopped farming: " + appID);
return success;
}

View File

@@ -39,19 +39,21 @@ namespace ArchiSteamFarm {
TwoFactorAuthentication,
}
internal const ulong ArchiSCFarmGroup = 103582791440160998;
internal const string ConfigDirectoryPath = "config";
private const string LatestGithubReleaseURL = "https://api.github.com/repos/JustArchi/ArchiSteamFarm/releases/latest";
internal static readonly object ConsoleLock = new object();
internal const ulong ArchiSCFarmGroup = 103582791440160998;
internal const string ConfigDirectoryPath = "config";
private static readonly SemaphoreSlim SteamSemaphore = new SemaphoreSlim(1);
private static readonly ManualResetEvent ShutdownResetEvent = new ManualResetEvent(false);
private static readonly Assembly Assembly = Assembly.GetExecutingAssembly();
private static readonly string ExecutablePath = Assembly.Location;
private static readonly AssemblyName AssemblyName = Assembly.GetName();
private static readonly string ExeName = AssemblyName.Name + ".exe";
//private static readonly string ExeName = AssemblyName.Name + ".exe";
private static readonly string Version = AssemblyName.Version.ToString();
internal static readonly object ConsoleLock = new object();
private static async Task CheckForUpdate() {
JObject response = await Utilities.UrlToJObject(LatestGithubReleaseURL).ConfigureAwait(false);
if (response == null) {
@@ -69,11 +71,11 @@ namespace ArchiSteamFarm {
Logging.LogGenericNotice("", "Remote version: " + remoteVersion);
int comparisonResult = localVersion.CompareTo(remoteVersion);
if (localVersion.CompareTo(remoteVersion) < 0) {
if (comparisonResult < 0) {
Logging.LogGenericNotice("", "New version is available!");
Logging.LogGenericNotice("", "Consider updating yourself!");
await Utilities.SleepAsync(5000).ConfigureAwait(false);
} else if (localVersion.CompareTo(remoteVersion) > 0) {
} else if (comparisonResult > 0) {
Logging.LogGenericNotice("", "You're currently using pre-release version!");
Logging.LogGenericNotice("", "Be careful!");
}

View File

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.6.0.0")]
[assembly: AssemblyFileVersion("0.6.0.0")]
[assembly: AssemblyVersion("0.7.0.0")]
[assembly: AssemblyFileVersion("0.7.0.0")]

View File

@@ -68,7 +68,7 @@ namespace ArchiSteamFarm {
try {
using (HttpClientHandler clientHandler = new HttpClientHandler { UseCookies = false }) {
using (HttpClient client = new HttpClient(clientHandler)) {
client.Timeout = TimeSpan.FromSeconds(10);
client.Timeout = TimeSpan.FromSeconds(30);
client.DefaultRequestHeaders.UserAgent.ParseAdd("ArchiSteamFarm/1.0");
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, websiteAddress);
if (cookieVariables != null) {
@@ -126,7 +126,7 @@ namespace ArchiSteamFarm {
try {
using (HttpClientHandler clientHandler = new HttpClientHandler { UseCookies = false }) {
using (HttpClient client = new HttpClient(clientHandler)) {
client.Timeout = TimeSpan.FromSeconds(10);
client.Timeout = TimeSpan.FromSeconds(30);
client.DefaultRequestHeaders.UserAgent.ParseAdd("ArchiSteamFarm/1.0");
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, request);
requestMessage.Content = new FormUrlEncodedContent(postData);
@@ -163,7 +163,7 @@ namespace ArchiSteamFarm {
try {
using (HttpClientHandler clientHandler = new HttpClientHandler { UseCookies = false }) {
using (HttpClient client = new HttpClient(clientHandler)) {
client.Timeout = TimeSpan.FromSeconds(10);
client.Timeout = TimeSpan.FromSeconds(30);
client.DefaultRequestHeaders.UserAgent.ParseAdd("ArchiSteamFarm/1.0");
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, request);
requestMessage.Content = new FormUrlEncodedContent(postData);

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- Every bot should have it's own unique .xml configuration file, this is example on which you can base on -->
<!-- Notice, if you use special characters reserved for XML, you should escape them -->
@@ -58,5 +57,4 @@
<!-- Consider leaving it at "true", this way I can check how many running bots are active -->
<!-- TIP: Group link is http://steamcommunity.com/groups/ascfarm -->
<Statistics type="bool" value="true"/>
</configuration>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="HtmlAgilityPack" version="1.4.9" targetFramework="net45" />
<package id="Newtonsoft.Json" version="8.0.1-beta1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="8.0.1-beta2" targetFramework="net45" />
<package id="protobuf-net" version="2.0.0.668" targetFramework="net45" />
<package id="SteamKit2" version="1.6.5" targetFramework="net45" />
</packages>

View File

@@ -14,8 +14,11 @@ Big work-in-progress. This bot allows you to farm steam cards using multiple acc
**Current Commands:**
- `!exit` Stops whole ASF
- `!farm` Restarts the bot and starts card-farming (again)
- `!exit` Stops the bot
- `!start <BOT>` Starts given bot instance
- `!status` Prints current status of ASF
- `!stop <BOT>` Stops given bot instance
> You can use chat-commands in group-chat or private-chat with your bot.
> The MasterID has to be set for this specific bot / config-file.

View File

@@ -106,7 +106,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Bson.BsonReader.Read">
<summary>
@@ -926,6 +926,25 @@
Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings.
</summary>
</member>
<member name="T:Newtonsoft.Json.IJsonBufferPool`1">
<summary>
Provides an interface for using pooled buffers.
</summary>
<typeparam name="T">The buffer type content.</typeparam>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.RentBuffer(System.Int32)">
<summary>
Rent a buffer from the pool. This buffer must be returned when it is no longer needed.
</summary>
<param name="minSize">The minimum required size of the buffer. The returned buffer may be larger.</param>
<returns>The rented buffer from the pool.</returns>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.ReturnBuffer(`0[]@)">
<summary>
Return a buffer to the pool.
</summary>
<param name="buffer">The buffer that is being returned.</param>
</member>
<member name="T:Newtonsoft.Json.JsonConstructorAttribute">
<summary>
Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object.
@@ -2167,7 +2186,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Linq.JTokenReader.Read">
<summary>
@@ -6620,7 +6639,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonValidatingReader.Read">
<summary>
@@ -6685,6 +6704,11 @@
</summary>
<param name="reader">The <c>TextReader</c> containing the XML data to read.</param>
</member>
<member name="P:Newtonsoft.Json.JsonTextReader.BufferPool">
<summary>
Gets or sets the reader's character buffer pool.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.Read">
<summary>
Reads the next JSON token from the stream.
@@ -6723,7 +6747,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.Close">
<summary>
@@ -6871,6 +6895,11 @@
Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.BufferPool">
<summary>
Gets or sets the writer's character buffer pool.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.Indentation">
<summary>
Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>.
@@ -7470,7 +7499,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonReader.Skip">
<summary>

View File

@@ -89,7 +89,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset">
<summary>
@@ -977,6 +977,25 @@
Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings.
</summary>
</member>
<member name="T:Newtonsoft.Json.IJsonBufferPool`1">
<summary>
Provides an interface for using pooled buffers.
</summary>
<typeparam name="T">The buffer type content.</typeparam>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.RentBuffer(System.Int32)">
<summary>
Rent a buffer from the pool. This buffer must be returned when it is no longer needed.
</summary>
<param name="minSize">The minimum required size of the buffer. The returned buffer may be larger.</param>
<returns>The rented buffer from the pool.</returns>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.ReturnBuffer(`0[]@)">
<summary>
Return a buffer to the pool.
</summary>
<param name="buffer">The buffer that is being returned.</param>
</member>
<member name="T:Newtonsoft.Json.JsonConstructorAttribute">
<summary>
Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to use the specified constructor when deserializing that object.
@@ -2229,7 +2248,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset">
<summary>
@@ -5670,7 +5689,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset">
<summary>
@@ -5741,6 +5760,11 @@
</summary>
<param name="reader">The <c>TextReader</c> containing the XML data to read.</param>
</member>
<member name="P:Newtonsoft.Json.JsonTextReader.BufferPool">
<summary>
Gets or sets the reader's character buffer pool.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.Read">
<summary>
Reads the next JSON token from the stream.
@@ -5779,7 +5803,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset">
<summary>
@@ -5933,6 +5957,11 @@
Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.BufferPool">
<summary>
Gets or sets the writer's character buffer pool.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.Indentation">
<summary>
Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>.
@@ -6538,7 +6567,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset">
<summary>

View File

@@ -89,7 +89,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset">
<summary>
@@ -973,6 +973,25 @@
Floating point numbers are parsed to <see cref="F:Newtonsoft.Json.FloatParseHandling.Decimal"/>.
</summary>
</member>
<member name="T:Newtonsoft.Json.IJsonBufferPool`1">
<summary>
Provides an interface for using pooled buffers.
</summary>
<typeparam name="T">The buffer type content.</typeparam>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.RentBuffer(System.Int32)">
<summary>
Rent a buffer from the pool. This buffer must be returned when it is no longer needed.
</summary>
<param name="minSize">The minimum required size of the buffer. The returned buffer may be larger.</param>
<returns>The rented buffer from the pool.</returns>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.ReturnBuffer(`0[]@)">
<summary>
Return a buffer to the pool.
</summary>
<param name="buffer">The buffer that is being returned.</param>
</member>
<member name="T:Newtonsoft.Json.JsonDictionaryAttribute">
<summary>
Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> how to serialize the collection.
@@ -2321,7 +2340,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset">
<summary>
@@ -5878,7 +5897,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset">
<summary>
@@ -5949,6 +5968,11 @@
</summary>
<param name="reader">The <c>TextReader</c> containing the XML data to read.</param>
</member>
<member name="P:Newtonsoft.Json.JsonTextReader.BufferPool">
<summary>
Gets or sets the reader's character buffer pool.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.Read">
<summary>
Reads the next JSON token from the stream.
@@ -5987,7 +6011,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset">
<summary>
@@ -6141,6 +6165,11 @@
Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.BufferPool">
<summary>
Gets or sets the writer's character buffer pool.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.Indentation">
<summary>
Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>.
@@ -6746,7 +6775,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset">
<summary>

View File

@@ -106,7 +106,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset">
<summary>
@@ -1084,6 +1084,25 @@
Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings.
</summary>
</member>
<member name="T:Newtonsoft.Json.IJsonBufferPool`1">
<summary>
Provides an interface for using pooled buffers.
</summary>
<typeparam name="T">The buffer type content.</typeparam>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.RentBuffer(System.Int32)">
<summary>
Rent a buffer from the pool. This buffer must be returned when it is no longer needed.
</summary>
<param name="minSize">The minimum required size of the buffer. The returned buffer may be larger.</param>
<returns>The rented buffer from the pool.</returns>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.ReturnBuffer(`0[]@)">
<summary>
Return a buffer to the pool.
</summary>
<param name="buffer">The buffer that is being returned.</param>
</member>
<member name="T:Newtonsoft.Json.IJsonLineInfo">
<summary>
Provides an interface to enable a class to return line and position information.
@@ -2386,7 +2405,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset">
<summary>
@@ -3030,6 +3049,11 @@
</summary>
<param name="reader">The <c>TextReader</c> containing the XML data to read.</param>
</member>
<member name="P:Newtonsoft.Json.JsonTextReader.BufferPool">
<summary>
Gets or sets the reader's character buffer pool.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.Read">
<summary>
Reads the next JSON token from the stream.
@@ -3068,7 +3092,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset">
<summary>
@@ -3110,6 +3134,11 @@
Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.BufferPool">
<summary>
Gets or sets the writer's character buffer pool.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.Indentation">
<summary>
Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>.
@@ -3557,7 +3586,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset">
<summary>
@@ -6199,7 +6228,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset">
<summary>

View File

@@ -106,7 +106,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset">
<summary>
@@ -857,6 +857,25 @@
Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings.
</summary>
</member>
<member name="T:Newtonsoft.Json.IJsonBufferPool`1">
<summary>
Provides an interface for using pooled buffers.
</summary>
<typeparam name="T">The buffer type content.</typeparam>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.RentBuffer(System.Int32)">
<summary>
Rent a buffer from the pool. This buffer must be returned when it is no longer needed.
</summary>
<param name="minSize">The minimum required size of the buffer. The returned buffer may be larger.</param>
<returns>The rented buffer from the pool.</returns>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.ReturnBuffer(`0[]@)">
<summary>
Return a buffer to the pool.
</summary>
<param name="buffer">The buffer that is being returned.</param>
</member>
<member name="T:Newtonsoft.Json.IJsonLineInfo">
<summary>
Provides an interface to enable a class to return line and position information.
@@ -1947,7 +1966,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset">
<summary>
@@ -2573,6 +2592,11 @@
</summary>
<param name="reader">The <c>TextReader</c> containing the XML data to read.</param>
</member>
<member name="P:Newtonsoft.Json.JsonTextReader.BufferPool">
<summary>
Gets or sets the reader's character buffer pool.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.Read">
<summary>
Reads the next JSON token from the stream.
@@ -2611,7 +2635,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset">
<summary>
@@ -2653,6 +2677,11 @@
Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.BufferPool">
<summary>
Gets or sets the writer's character buffer pool.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.Indentation">
<summary>
Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>.
@@ -3100,7 +3129,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset">
<summary>
@@ -5484,7 +5513,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset">
<summary>

View File

@@ -106,7 +106,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Bson.BsonReader.ReadAsDateTimeOffset">
<summary>
@@ -956,6 +956,25 @@
Causes child objects to be indented according to the <see cref="P:Newtonsoft.Json.JsonTextWriter.Indentation"/> and <see cref="P:Newtonsoft.Json.JsonTextWriter.IndentChar"/> settings.
</summary>
</member>
<member name="T:Newtonsoft.Json.IJsonBufferPool`1">
<summary>
Provides an interface for using pooled buffers.
</summary>
<typeparam name="T">The buffer type content.</typeparam>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.RentBuffer(System.Int32)">
<summary>
Rent a buffer from the pool. This buffer must be returned when it is no longer needed.
</summary>
<param name="minSize">The minimum required size of the buffer. The returned buffer may be larger.</param>
<returns>The rented buffer from the pool.</returns>
</member>
<member name="M:Newtonsoft.Json.IJsonBufferPool`1.ReturnBuffer(`0[]@)">
<summary>
Return a buffer to the pool.
</summary>
<param name="buffer">The buffer that is being returned.</param>
</member>
<member name="T:Newtonsoft.Json.IJsonLineInfo">
<summary>
Provides an interface to enable a class to return line and position information.
@@ -2197,7 +2216,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonReader.ReadAsDateTimeOffset">
<summary>
@@ -2823,6 +2842,11 @@
</summary>
<param name="reader">The <c>TextReader</c> containing the XML data to read.</param>
</member>
<member name="P:Newtonsoft.Json.JsonTextReader.BufferPool">
<summary>
Gets or sets the reader's character buffer pool.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.Read">
<summary>
Reads the next JSON token from the stream.
@@ -2861,7 +2885,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonTextReader.ReadAsDateTimeOffset">
<summary>
@@ -2903,6 +2927,11 @@
Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.BufferPool">
<summary>
Gets or sets the writer's character buffer pool.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonTextWriter.Indentation">
<summary>
Gets or sets how many IndentChars to write for each level in the hierarchy when <see cref="T:Newtonsoft.Json.Formatting"/> is set to <c>Formatting.Indented</c>.
@@ -3350,7 +3379,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonValidatingReader.ReadAsDateTimeOffset">
<summary>
@@ -5772,7 +5801,7 @@
<summary>
Reads the next JSON token from the stream as a <see cref="T:System.Nullable`1"/>.
</summary>
<returns>A <see cref="T:System.String"/>. This method will return <c>null</c> at the end of an array.</returns>
<returns>A <see cref="T:System.Nullable`1"/>. This method will return <c>null</c> at the end of an array.</returns>
</member>
<member name="M:Newtonsoft.Json.Linq.JTokenReader.ReadAsDateTimeOffset">
<summary>