初始化上传
This commit is contained in:
99
常用工具集/Utility/Network/Modbus/SharpSerial/Program.Tools.cs
Normal file
99
常用工具集/Utility/Network/Modbus/SharpSerial/Program.Tools.cs
Normal file
@@ -0,0 +1,99 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace SharpSerial
|
||||
{
|
||||
public static class Tools
|
||||
{
|
||||
public static void SetupGlobalCatcher()
|
||||
{
|
||||
AppDomain.CurrentDomain.UnhandledException += ExceptionHandler;
|
||||
}
|
||||
|
||||
public static void ExceptionHandler(object sender, UnhandledExceptionEventArgs args)
|
||||
{
|
||||
ExceptionHandler(args.ExceptionObject as Exception);
|
||||
}
|
||||
|
||||
public static void ExceptionHandler(Exception ex)
|
||||
{
|
||||
Try(() => Stdio.Trace("!{0}", ex.ToString()));
|
||||
Try(() => Stdio.WriteLine("!{0}", ex.ToString()));
|
||||
Environment.Exit(1);
|
||||
}
|
||||
|
||||
public static string StringHex(byte[] data)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.Append("<");
|
||||
foreach (var b in data) sb.Append(b.ToString("X2"));
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static byte[] ParseHex(string text)
|
||||
{
|
||||
Assert(text.Length % 2 == 1, "Odd length expected for {0}:{1}", text.Length, text);
|
||||
var bytes = new byte[text.Length / 2];
|
||||
for (var i = 0; i < bytes.Length; i++)
|
||||
{
|
||||
var b2 = text.Substring(1 + i * 2, 2);
|
||||
bytes[i] = Convert.ToByte(b2, 16);
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
public static void SetProperty(object target, string line)
|
||||
{
|
||||
var parts = line.Split(new char[] { '=' });
|
||||
if (parts.Length != 2) throw Make("Expected 2 parts in {0}", Readable(line));
|
||||
var propertyName = parts[0];
|
||||
var propertyValue = parts[1];
|
||||
var property = target.GetType().GetProperty(propertyName);
|
||||
if (property == null) throw Make("Property not found {0}", Readable(propertyName));
|
||||
var value = FromString(property.PropertyType, propertyValue);
|
||||
property.SetValue(target, value, null);
|
||||
}
|
||||
|
||||
public static object FromString(Type type, string text)
|
||||
{
|
||||
if (type.IsEnum) return Enum.Parse(type, text);
|
||||
return Convert.ChangeType(text, type);
|
||||
}
|
||||
|
||||
public static void Try(Action action)
|
||||
{
|
||||
try
|
||||
{
|
||||
action.Invoke();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//no clear use case for cleanup exception
|
||||
}
|
||||
}
|
||||
|
||||
public static Exception Make(string format, params object[] args)
|
||||
{
|
||||
var line = format;
|
||||
if (args.Length > 0) line = string.Format(format, args);
|
||||
return new Exception(line);
|
||||
}
|
||||
|
||||
public static string Readable(string text)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
foreach (var c in text)
|
||||
{
|
||||
if (Char.IsControl(c)) sb.Append(((int)c).ToString("X2"));
|
||||
else if (Char.IsWhiteSpace(c)) sb.Append(((int)c).ToString("X2"));
|
||||
else sb.Append(c);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static void Assert(bool condition, string format, params object[] args)
|
||||
{
|
||||
if (!condition) throw Make(format, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user