From 0b444d04c225a4fd1a42f7c60dcd48b31b5cd1b3 Mon Sep 17 00:00:00 2001 From: Sean McArdle Date: Thu, 17 Nov 2016 00:10:44 -0800 Subject: [PATCH] Now passing simplified network state to client. --- WifiSitter/{ => Model}/NetworkState.cs | 3 ++ WifiSitter/Model/SimpleNetworkState.cs | 50 ++++++++++++++++++++ WifiSitter/{ => Model}/SitterNic.cs | 19 +++++--- WifiSitter/Model/WifiSitterIpcMessage.cs | 64 ++++++++++++++++++++++++++ WifiSitter/WifiSitter.cs | 6 +-- WifiSitter/WifiSitter.csproj | 9 ++-- WifiSitter/WifiSitterIpcMessage.cs | 32 ------------- WifiSitterGui/TrayIconControl.xaml | 6 +-- WifiSitterGui/TrayIconControl.xaml.cs | 8 ++-- WifiSitterGui/ViewModel/MainWindowViewModel.cs | 9 ++-- WifiSitterGui/WifiSitterGui.csproj | 11 +++-- 11 files changed, 156 insertions(+), 61 deletions(-) rename WifiSitter/{ => Model}/NetworkState.cs (98%) create mode 100644 WifiSitter/Model/SimpleNetworkState.cs rename WifiSitter/{ => Model}/SitterNic.cs (98%) create mode 100644 WifiSitter/Model/WifiSitterIpcMessage.cs delete mode 100644 WifiSitter/WifiSitterIpcMessage.cs diff --git a/WifiSitter/NetworkState.cs b/WifiSitter/Model/NetworkState.cs similarity index 98% rename from WifiSitter/NetworkState.cs rename to WifiSitter/Model/NetworkState.cs index 1d7100f..08d47f3 100644 --- a/WifiSitter/NetworkState.cs +++ b/WifiSitter/Model/NetworkState.cs @@ -22,6 +22,9 @@ namespace WifiSitter #region constructor + public NetworkState() { + Initialize(); + } public NetworkState(string[] NicWhitelist) { if (NicWhitelist == null) diff --git a/WifiSitter/Model/SimpleNetworkState.cs b/WifiSitter/Model/SimpleNetworkState.cs new file mode 100644 index 0000000..4335fdf --- /dev/null +++ b/WifiSitter/Model/SimpleNetworkState.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WifiSitter; + +namespace WifiSitter.Model +{ + [Serializable] + public class SimpleNetworkState + { + public bool EthernetUp { get; set; } + public bool CheckNet { get; set; } + public List Nics { get; set; } + public bool NetworkAvailable { get; set; } + public bool ProcessingState { get; set; } + + public SimpleNetworkState() { } + + public SimpleNetworkState(NetworkState netstate) { + NetworkAvailable = netstate.NetworkAvailable; + ProcessingState = netstate.ProcessingState; + EthernetUp = netstate.EthernetUp; + CheckNet = netstate.CheckNet; + Nics = netstate.Nics.Select(x => new SimpleNic(x)).ToList(); + } + } + + [Serializable] + public class SimpleNic { + public bool IsEnabled { get; set; } + public bool IsConnected { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public string Id { get; set; } + public string InterfaceType { get; set; } + + public SimpleNic() { } + + public SimpleNic(TrackedNic nic) { + IsEnabled = nic.IsEnabled; + IsConnected = nic.IsConnected; + Name = nic.Name; + Description = nic.Description; + Id = nic.Id; + InterfaceType = nic.Nic.NetworkInterfaceType.ToString(); + } + } +} diff --git a/WifiSitter/SitterNic.cs b/WifiSitter/Model/SitterNic.cs similarity index 98% rename from WifiSitter/SitterNic.cs rename to WifiSitter/Model/SitterNic.cs index 359fa2d..0efd075 100644 --- a/WifiSitter/SitterNic.cs +++ b/WifiSitter/Model/SitterNic.cs @@ -17,6 +17,10 @@ namespace WifiSitter private bool _isEnabled; private bool _isConnected; + public TrackedNic() { + + } + #region constructor public TrackedNic(NetworkInterface Nic) { this._nic = Nic; @@ -34,6 +38,7 @@ namespace WifiSitter public NetworkInterface Nic { get { return _nic; } + set { _nic = value; } } public bool IsEnabled { @@ -42,6 +47,12 @@ namespace WifiSitter } + public bool IsConnected { + get { return _isConnected; } + set { _isConnected = value; } + } + + public string Name { get { return Nic.Name; } } @@ -55,13 +66,7 @@ namespace WifiSitter public string Id { get { return Nic.Id; } } - - - public bool IsConnected { - get { return _isConnected; } - set { _isConnected = value; } - } - + #endregion // properties diff --git a/WifiSitter/Model/WifiSitterIpcMessage.cs b/WifiSitter/Model/WifiSitterIpcMessage.cs new file mode 100644 index 0000000..78a9e59 --- /dev/null +++ b/WifiSitter/Model/WifiSitterIpcMessage.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; + +namespace WifiSitter +{ + [Serializable] + public class WifiSitterIpcMessage + { + public string Request { get; set; } + public string Requestor { get; set; } + public string Target { get; set; } + public byte[] Payload { get; set; } + public Type PayloadType { get; set; } + + public WifiSitterIpcMessage() { } + + public WifiSitterIpcMessage(string Verb, string WhosAsking, string WhereTo, string SendingWhat = "") { + Request = Verb; + Requestor = WhosAsking; + Target = WhereTo; + Payload = System.Text.Encoding.UTF8.GetBytes(SendingWhat); + PayloadType = typeof(string); + } + + public WifiSitterIpcMessage(string Verb, string WhosAsking, string WhereTo, object SendingWhat, Type type) { + Request = Verb; + Requestor = WhosAsking; + Target = WhereTo; + Payload = SendingWhat.ObjectToByteArray(); + PayloadType = SendingWhat.GetType(); + } + } + + public static class WifiSitterExtensions + { + public static string IpcMessageJsonString(this WifiSitterIpcMessage message) { + string result; + result = Newtonsoft.Json.JsonConvert.SerializeObject(message); + return result; + } + + public static byte[] ObjectToByteArray(this object obj) { + BinaryFormatter bf = new BinaryFormatter(); + using (var ms = new MemoryStream()) { + bf.Serialize(ms, obj); + return ms.ToArray(); + } + } + + public static Object ByteArrayToObject(this byte[] arrBytes) { + using (var memStream = new MemoryStream()) { + var binForm = new BinaryFormatter(); + memStream.Write(arrBytes, 0, arrBytes.Length); + memStream.Seek(0, SeekOrigin.Begin); + var obj = binForm.Deserialize(memStream); + return obj; + } + } + } +} diff --git a/WifiSitter/WifiSitter.cs b/WifiSitter/WifiSitter.cs index b9a6677..4c9bf9d 100644 --- a/WifiSitter/WifiSitter.cs +++ b/WifiSitter/WifiSitter.cs @@ -369,13 +369,13 @@ namespace WifiSitter WifiSitterIpcMessage _msg = null; try { _msg = Newtonsoft.Json.JsonConvert.DeserializeObject(e.DataGram.Message); } - catch { Trace.WriteLine("Deserialize to ServiceRequest failed."); } + catch { LogLine("Deserialize to WifiSitterIpcMessage failed."); } if (_msg != null) { if (_msg.Request == "get_netstate") { LogLine("Sending netstate to: {0}", _msg.Requestor); - var response = new WifiSitterIpcMessage("give_netstate", _wsIpc.MyChannelName, "", Newtonsoft.Json.JsonConvert.SerializeObject(netstate)); - _wsIpc.MsgBroadcaster.SendToChannel(_msg.Target, response); + var response = new WifiSitterIpcMessage("give_netstate", _wsIpc.MyChannelName, "", Newtonsoft.Json.JsonConvert.SerializeObject(new Model.SimpleNetworkState(netstate))); + _wsIpc.MsgBroadcaster.SendToChannel(_msg.Target, response.IpcMessageJsonString()); } } else { diff --git a/WifiSitter/WifiSitter.csproj b/WifiSitter/WifiSitter.csproj index 7e0afea..4d72795 100644 --- a/WifiSitter/WifiSitter.csproj +++ b/WifiSitter/WifiSitter.csproj @@ -109,15 +109,16 @@ - + + Component - + - + @@ -148,7 +149,7 @@ - +