Skip to content

Commit

Permalink
Add Time Tools (get tick, set tick, and ntp reset)
Browse files Browse the repository at this point in the history
  • Loading branch information
LegoFigure11 committed Apr 10, 2024
1 parent f14db72 commit a1cecf6
Show file tree
Hide file tree
Showing 7 changed files with 399 additions and 20 deletions.
14 changes: 14 additions & 0 deletions RaidCrawler.Core/Connection/ConnectionWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,20 @@ public async Task ResetTimeNTP(CancellationToken token)
await Connection.SendAsync(command, token).ConfigureAwait(false);
}

public async Task<ulong> GetCurrentTime(CancellationToken token)
{
var command = Encoding.ASCII.GetBytes($"getCurrentTime{(CRLF ? "\r\n" : "")}");
var res = await Connection.ReadRaw(command, 17, token).ConfigureAwait(false);
ulong.TryParse(Encoding.ASCII.GetString(res).Trim('\n'), System.Globalization.NumberStyles.AllowHexSpecifier, null, out var time);
return time;
}

public async Task SetCurrentTime(ulong date, CancellationToken token)
{
var command = Encoding.ASCII.GetBytes($"setCurrentTime {date}{(CRLF ? "\r\n" : "")}");
await Connection.SendAsync(command, token).ConfigureAwait(false);
}

// Thank you to Anubis for sharing a more optimized routine, as well as CloseGame(), StartGame(), and SaveGame()!
public async Task AdvanceDate(
IDateAdvanceConfig config,
Expand Down
24 changes: 12 additions & 12 deletions RaidCrawler.WinForms/MainWindow.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 7 additions & 7 deletions RaidCrawler.WinForms/MainWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ await this
return;
}
ButtonEnable(true, ButtonAdvanceDate, ButtonReadRaids, ButtonDisconnect, ButtonViewRAM, ButtonDownloadEvents, SendScreenshot, btnOpenMap, Rewards, B_ResetTime);
ButtonEnable(true, ButtonAdvanceDate, ButtonReadRaids, ButtonDisconnect, ButtonViewRAM, ButtonDownloadEvents, SendScreenshot, btnOpenMap, Rewards, B_DateTools);
if (InvokeRequired)
{
Invoke(() =>
Expand Down Expand Up @@ -376,7 +376,7 @@ private void Disconnect(CancellationToken token)
Task.Run(
async () =>
{
ButtonEnable(false, ButtonAdvanceDate, ButtonReadRaids, ButtonDisconnect, ButtonViewRAM, ButtonDownloadEvents, SendScreenshot, B_ResetTime);
ButtonEnable(false, ButtonAdvanceDate, ButtonReadRaids, ButtonDisconnect, ButtonViewRAM, ButtonDownloadEvents, SendScreenshot, B_DateTools);
try
{
(bool success, string err) = await ConnectionWrapper
Expand Down Expand Up @@ -1797,19 +1797,19 @@ private static string GetSpriteNameForUrl(PK9 pk, bool shiny)
return spriteName.Replace('_', '-').Insert(0, "_");
}

private void B_ResetTime_Click(object sender, EventArgs e)
private void B_DateTools_Click(object sender, EventArgs e)
{
Task.Run(async () =>
{
try
{
UpdateStatus("Resetting date...");
await ConnectionWrapper.ResetTimeNTP(Source.Token).ConfigureAwait(false);
UpdateStatus("Date reset!");
var tick = await ConnectionWrapper.GetCurrentTime(Source.Token).ConfigureAwait(false);
var form = new TickModifier(tick, ConnectionWrapper, Webhook, Source.Token);
ShowDialog(form);
}
catch (Exception ex)
{
await this.DisplayMessageBox(Webhook, $"Could not reset the date: {ex.Message}", Source.Token).ConfigureAwait(false);
await this.DisplayMessageBox(Webhook, $"Could not read the date: {ex.Message}", Source.Token).ConfigureAwait(false);
}
});
}
Expand Down
62 changes: 61 additions & 1 deletion RaidCrawler.WinForms/MainWindow.resx
Original file line number Diff line number Diff line change
@@ -1,4 +1,64 @@
<root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
Expand Down
115 changes: 115 additions & 0 deletions RaidCrawler.WinForms/SubForms/TickModifier.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

70 changes: 70 additions & 0 deletions RaidCrawler.WinForms/SubForms/TickModifier.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
using RaidCrawler.Core.Connection;
using RaidCrawler.Core.Discord;

namespace RaidCrawler.WinForms.SubForms
{
public partial class TickModifier : Form
{
readonly ConnectionWrapperAsync ConnectionWrapper;
readonly NotificationHandler Webhook;
readonly CancellationToken Token;
public TickModifier(ulong tick, ConnectionWrapperAsync connectionWrapper, NotificationHandler webhook, CancellationToken token)
{
InitializeComponent();
TB_Tick.Text = tick.ToString();
ConnectionWrapper = connectionWrapper;
Webhook = webhook;
Token = token;
}

private async void B_Read_Click(object sender, EventArgs e)
{
try
{
var tick = await ConnectionWrapper.GetCurrentTime(Token).ConfigureAwait(false);

if (InvokeRequired)
Invoke(() => TB_Tick.Text = tick.ToString());
else
TB_Tick.Text = tick.ToString();
}
catch (Exception ex)
{
await this.DisplayMessageBox(Webhook, $"Could not read the date: {ex.Message}", Token).ConfigureAwait(false);
}
}

private async void B_NTP_Click(object sender, EventArgs e)
{
try
{
await ConnectionWrapper.ResetTimeNTP(Token).ConfigureAwait(false);
B_Read_Click(sender, e);
}
catch (Exception ex)
{
await this.DisplayMessageBox(Webhook, $"Could not reset the date: {ex.Message}", Token).ConfigureAwait(false);
}
}

private async void B_Write_Click(object sender, EventArgs e)
{
try
{
var success = ulong.TryParse(TB_Tick.Text, out var time);
if (success)
{
await ConnectionWrapper.SetCurrentTime(time, Token).ConfigureAwait(false);
}
else
{
await this.DisplayMessageBox(Webhook, $"Could not write the date: {TB_Tick.Text} could not be parsed as a ulong!", Token).ConfigureAwait(false);
}
}
catch (Exception ex)
{
await this.DisplayMessageBox(Webhook, $"Could not write the date: {ex.Message}", Token).ConfigureAwait(false);
}
}
}
}
Loading

0 comments on commit a1cecf6

Please sign in to comment.