public static void Main(string[] args) { updateBaseDir(); Debug.WriteLine("baseDir = " + baseDir); Debug.WriteLine("extentionsDir = " + extentionsDir); Debug.WriteLine("imagesDir = " + imagesDir); Debug.WriteLine("soundDir = " + soundDir); isDebugF(); PluginLoadAll(); if (IsDebug == false) { Dictionary <string, object> plug = Server.Program.PluginGet("TrayIcon"); if (plug == null) { return; } try { Assembly asem = (Assembly)plug["assembly"]; Type t = (Type)plug["type"]; object instance = (object)plug["instance"]; MethodInfo m = t.GetMethod("HideConsole"); Debug.WriteLine("m.Invoke(instance, new object[] {});"); m.Invoke(instance, new object[] { }); } catch (Exception error) { } } AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; listSocket = new List <JObject>(); exe = new Execute(); LoadRemoteParams(); watcher = new FileSystemWatcher(baseDir); watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; watcher.Filter = "*.json"; watcher.Changed += OnLoadRemoteParamsChanged; watcher.Created += OnLoadRemoteParamsChanged; //watcher.Deleted += OnLoadRemoteParamsChanged; watcher.Renamed += OnLoadRemoteParamsChanged; watcher.EnableRaisingEvents = true; try { Thread objThread = new Thread(TimerLoop); objThread.IsBackground = true; objThread.Priority = ThreadPriority.AboveNormal; objThread.Start(); } catch (ThreadStartException objException) { } catch (ThreadAbortException objException) { } catch (Exception objException) { } byte[] data = new byte[51200]; listhendPort = 25000; //listhendPort = FreeTcpPort(); IPEndPoint ipep = new IPEndPoint(IPAddress.Any, listhendPort); newsock = new UdpClient(ipep); Console.WriteLine("Waiting for a client..."); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); while (unload == false) { try { data = newsock.Receive(ref sender); Console.WriteLine("Message received from {0}:", sender.ToString()); string text = Encoding.UTF8.GetString(data, 0, data.Length); try { Console.WriteLine(text); } catch (Exception error) { Console.WriteLine(Encoding.ASCII.GetString(data, 0, data.Length)); } try { JObject ob = JObject.Parse(text); string function = ""; try { function = ob.GetValue("function").Value <string>(); } catch (Exception error) { } string macro = null; try { macro = ob.GetValue("macro").Value <string>(); } catch (Exception error) { } if (function != "") { if (function == "Pong") { for (int i = 0; i < listSocket.Count; i++) { if (listSocket[i]["addr"].Value <string>() == sender.Address.ToString() && listSocket[i]["port"].Value <int>() == sender.Port) { listSocket[i]["last"] = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; } } continue; } if (function == "GetInfo") { JObject sock = new JObject(); sock["addr"] = sender.Address.ToString(); sock["port"] = sender.Port; sock["last"] = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; listSocket.Add(sock); data = Encoding.UTF8.GetBytes(GetInfo()); newsock.Send(data, data.Length, sender); } if (function == "GetGrids" || function == "ForceReload") { if (function == "ForceReload") { LoadRemoteParams(); } string gri = JsonConvert.SerializeObject(GridsList.GetValue("grids")); data = Encoding.UTF8.GetBytes("{\"function\":\"SendGrids\", \"grids\":" + gri + "}"); } if (function == "GetImage") { string filePath = imagesDir + ob["reference"].Value <string>(); if (File.Exists(filePath) == true) { using (Image image = Image.FromFile(filePath)) { using (MemoryStream m = new MemoryStream()) { image.Save(m, image.RawFormat); byte[] imageBytes = m.ToArray(); string base64String = Convert.ToBase64String(imageBytes); data = Encoding.UTF8.GetBytes("{\"function\":\"RetGetImage\", \"reference\":\"" + ob["reference"].Value <string>() + "\", \"result\":\"data:" + MimeTypesMap.GetMimeType(filePath) + ";base64," + base64String + "\"}"); } } } else { data = Encoding.UTF8.GetBytes("{\"function\":\"RetGetImage\", \"reference\":\"" + ob["reference"].Value <string>() + "\", \"result\":\"ERROR\"}"); } } if (function == "GetSoundInfo" || function == "MuteSound" || function == "VolUp" || function == "VolDown") { JToken tok = ob.Value <JToken>(); ParseSoundInfo(function, ref newsock, sender, tok); } newsock.Send(data, data.Length, sender); } if (macro != null) { string sound = null; try { sound = ob.GetValue("sound").Value <string>(); } catch (Exception error) { } MacrosProcessing.Run(exe, MacroList, macro, sound, newsock, sender); } } catch (Exception error) { Debug.WriteLine(JsonConvert.SerializeObject(error)); Debug.WriteLine(Encoding.UTF8.GetString(data, 0, data.Length)); } } catch (Exception error) { Debug.WriteLine(error.StackTrace); } } }
public static void Run(Execute exe, JObject MacroList, string CalledMacro, string CalledSound, UdpClient newsock, IPEndPoint sender) { Debug.WriteLine("MacrosProcessing.Run: " + CalledMacro + " " + CalledSound); if (CalledMacro != "") { Debug.WriteLine("IN MACRO"); string[] tabGivenMacro = CalledMacro.Split('/'); foreach (JToken section in MacroList["sections"].ToList <JToken>()) { //Debug.WriteLine("section Compare: " + tabGivenMacro[0] + " " + section["name"].Value<string>()); if (section["name"].Value <string>() == tabGivenMacro[0]) { //Debug.WriteLine("section data = " + JsonConvert.SerializeObject(section)); if (section["macros"].Value <JObject>().ContainsKey(tabGivenMacro[1]) == true) { JObject ob2 = section["macros"][tabGivenMacro[1]].Value <JObject>(); if (CalledSound != "") { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) == true) { CalledSound = CalledSound.Replace("/", "\\"); } ob2["sound"] = Program.soundDir + CalledSound; } string st = JsonConvert.SerializeObject(ob2); //Debug.WriteLine("macro data = " + st); Dictionary <string, object> options = new Dictionary <string, object>() { { "exe", exe }, { "macro", ob2 }, { "newsock", newsock }, { "sender", sender } }; if (st.Contains("Sleep") == true && st.Contains("delay") == true) { Thread objThread = new Thread(new ParameterizedThreadStart(RunPart2)); //Make the thread as background thread. objThread.IsBackground = true; //Set the Priority of the thread. objThread.Priority = ThreadPriority.AboveNormal; //Start the thread. objThread.Start(options); } else { RunPart2(options); } } } } } else { if (CalledSound != "") { JObject options = new JObject(); if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) == true) { CalledSound = CalledSound.Replace("/", "\\"); } options["url"] = Program.soundDir + CalledSound; PlaySound(options); } } }