kopia lustrzana https://github.com/dl2alf/AirScout
137 wiersze
3.9 KiB
C#
137 wiersze
3.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace WinTest
|
|
{
|
|
public enum WTMESSAGES
|
|
{
|
|
NONE = 0,
|
|
STATUS = 1,
|
|
PKTRCVD = 2,
|
|
SETAZIMUTH = 250,
|
|
SETELEVATION = 251,
|
|
ASSETPATH = 252,
|
|
ASSHOWPATH = 253,
|
|
ASNEAREST = 254,
|
|
UNKNOWN = 255
|
|
}
|
|
|
|
public class wtMessage
|
|
{
|
|
public WTMESSAGES Msg;
|
|
public string Src;
|
|
public string Dst;
|
|
public string Data;
|
|
public string Extra;
|
|
public byte Checksum;
|
|
public bool HasChecksum;
|
|
|
|
public wtMessage(byte[] bytes)
|
|
{
|
|
Msg = WTMESSAGES.NONE;
|
|
Src = "";
|
|
Dst = "";
|
|
Data = "";
|
|
Extra = "";
|
|
Checksum = 0;
|
|
HasChecksum = false;
|
|
this.FromBytes(bytes);
|
|
}
|
|
|
|
public wtMessage(WTMESSAGES MSG, string src, string dst, string data)
|
|
{
|
|
Msg = MSG;
|
|
Src = src;
|
|
Dst = dst;
|
|
Data = data;
|
|
Extra = "";
|
|
Checksum = 0;
|
|
HasChecksum = false;
|
|
}
|
|
|
|
public wtMessage(WTMESSAGES MSG, string src, string dst, string data, string extra)
|
|
{
|
|
Msg = MSG;
|
|
Src = src;
|
|
Dst = dst;
|
|
Data = data;
|
|
Extra = extra;
|
|
Checksum = 0;
|
|
HasChecksum = false;
|
|
}
|
|
|
|
public void FromBytes(byte[] bytes)
|
|
{
|
|
// convert bytes coded in UTF8 to text
|
|
string text = Encoding.ASCII.GetString(bytes);
|
|
string msg = text.Substring(0, text.IndexOf(": "));
|
|
try
|
|
{
|
|
Msg = (WTMESSAGES)Enum.Parse(typeof(WTMESSAGES), msg);
|
|
}
|
|
catch
|
|
{
|
|
Msg = WTMESSAGES.UNKNOWN;
|
|
}
|
|
text = text.Remove(0, text.IndexOf(": ") + 2);
|
|
Src = text.Substring(0, text.IndexOf(" ")).Replace("\"", "");
|
|
text = text.Remove(0, text.IndexOf(" ") + 1);
|
|
Dst = text.Substring(0, text.IndexOf(" ")).Replace("\"", "");
|
|
text = text.Remove(0, text.IndexOf(" ") + 1);
|
|
// Clean up the message --> scrub last byte
|
|
text = text.Substring(0, text.Length - 1).Replace("\"", "");
|
|
// convert bytes coded in UTF8 to text
|
|
Data = text.Substring(0, text.Length);
|
|
// get checksum
|
|
Checksum = (byte)(bytes[bytes.Length - 1] | 0x80);
|
|
byte sum = 0;
|
|
for (int i = 0; i < bytes.Length-1; i++)
|
|
sum += bytes[i];
|
|
sum = (byte)(sum | 0x80);
|
|
if (Checksum == sum)
|
|
HasChecksum = true;
|
|
else
|
|
HasChecksum = false;
|
|
}
|
|
|
|
public byte[] ToBytes()
|
|
{
|
|
byte[] b = null;
|
|
string s;
|
|
try
|
|
{
|
|
switch (Msg)
|
|
{
|
|
case WTMESSAGES.NONE:
|
|
break;
|
|
case WTMESSAGES.UNKNOWN:
|
|
break;
|
|
default:
|
|
// combine all fields to string incl. placeholder for checksum
|
|
s = Msg + ": " + "\"" + Src + "\" \"" + Dst + "\" \"" + Data + "\"" + Extra + "?";
|
|
// translate into ASCII bytes
|
|
b = Encoding.ASCII.GetBytes(s);
|
|
// calculate checksum
|
|
byte sum = 0;
|
|
for (int i = 0; i < b.Length-1; i++)
|
|
sum += b[i];
|
|
sum = (byte)(sum | (byte)0x80);
|
|
b[b.Length - 1] = sum;
|
|
break;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
throw new ArgumentOutOfRangeException(Msg.ToString(), "Unkwon Message.");
|
|
}
|
|
return b;
|
|
}
|
|
}
|
|
|
|
public class WinTest
|
|
{
|
|
}
|
|
}
|