Skip to content

Instantly share code, notes, and snippets.

@substanc3-dev
Created November 13, 2023 07:34
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save substanc3-dev/c82e746cc185eed989bd978a5a2d803b to your computer and use it in GitHub Desktop.
Save substanc3-dev/c82e746cc185eed989bd978a5a2d803b to your computer and use it in GitHub Desktop.
Console.WriteLine("NTSerialTool by substanc3");
int targetBaud = 4800;
var ipEndPoint = new IPEndPoint(IPAddress.Loopback, 31337);
using TcpClient client = new();
await client.ConnectAsync(ipEndPoint);
await using NetworkStream vStream = client.GetStream();
Console.WriteLine("Connected to VirtualBox.");
var ipEndPoint2 = new IPEndPoint(IPAddress.Any, 31338);
TcpListener listener = new(ipEndPoint2);
listener.Start();
using TcpClient handler = await listener.AcceptTcpClientAsync();
await using NetworkStream mStream = handler.GetStream();
Console.WriteLine("Connected to MAME.");
Queue<byte> vQueue = new Queue<byte>();
Queue<byte> mQueue = new Queue<byte>();
var vBuffer = new byte[1];
var mBuffer = new byte[1];
var vTask = vStream.ReadAsync(vBuffer).AsTask();
var mTask = mStream.ReadAsync(vBuffer).AsTask();
var timeTask = Task.Delay(1000 / (targetBaud / 8));
while(true)
{
var task = await Task.WhenAny(vTask, mTask, timeTask);
if (task == vTask)
{
var amt = await vTask;
for (int i = 0; i < amt; i++)
{
vQueue.Enqueue(vBuffer[i]);
vBuffer[i] = 0;
}
vTask = vStream.ReadAsync(vBuffer).AsTask();
}
else if (task == mTask)
{
var amt = await mTask;
for (int i = 0; i < amt; i++)
{
mQueue.Enqueue(mBuffer[i]);
mBuffer[i] = 0;
}
mTask = mStream.ReadAsync(mBuffer).AsTask();
}
else if (task == timeTask)
{
if(vQueue.Count > 0)
{
var b = vQueue.Dequeue();
await mStream.WriteAsync(new byte[] { b });
}
else if (mQueue.Count > 0)
{
var b = mQueue.Dequeue();
await vStream.WriteAsync(new byte[] { b });
}
await timeTask;
timeTask = Task.Delay(1000 / (targetBaud / 8));
}
else
Console.WriteLine("Error");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment