mirror of
https://github.com/netchx/netch.git
synced 2026-03-16 17:53:17 +08:00
71 lines
2.0 KiB
C#
71 lines
2.0 KiB
C#
using System;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
|
|
namespace Netch.Utils
|
|
{
|
|
public class OnlyInstance
|
|
{
|
|
public enum Commands
|
|
{
|
|
Show,
|
|
Exit
|
|
}
|
|
|
|
public static event EventHandler<Commands> Called;
|
|
|
|
private static void OnCalled(Commands e)
|
|
{
|
|
Called?.Invoke(null, e);
|
|
}
|
|
|
|
public static async void Server()
|
|
{
|
|
try
|
|
{
|
|
if (PortHelper.PortInUse(Global.Settings.UDPSocketPort))
|
|
{
|
|
Global.Settings.UDPSocketPort = PortHelper.GetAvailablePort();
|
|
Configuration.Save();
|
|
}
|
|
|
|
var data = new byte[1024];
|
|
var newsock = new UdpClient(new IPEndPoint(IPAddress.Loopback, Global.Settings.UDPSocketPort));
|
|
|
|
while (true)
|
|
{
|
|
var result = await newsock.ReceiveAsync();
|
|
data = result.Buffer;
|
|
if (Enum.TryParse<Commands>(Encoding.ASCII.GetString(data, 0, data.Length), out var command))
|
|
{
|
|
OnCalled(command);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Logging.Error(e.ToString());
|
|
}
|
|
}
|
|
|
|
public static async void Send(Commands command)
|
|
{
|
|
try
|
|
{
|
|
using (var udpClient = new UdpClient(Global.Settings.UDPSocketPort))
|
|
{
|
|
udpClient.Connect(IPAddress.Loopback, Global.Settings.UDPSocketPort);
|
|
var sendBytes = Encoding.ASCII.GetBytes(command.ToString());
|
|
await udpClient.SendAsync(sendBytes, sendBytes.Length);
|
|
|
|
udpClient.Close();
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine(e.ToString());
|
|
}
|
|
}
|
|
}
|
|
} |