Program.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. using System;
  2. using System.Net.ApiService;
  3. using System.Fire.Ini;
  4. using System.Collections.Generic;
  5. using System.Net.ApiService.VHost_Server;
  6. using System.ConsoleApp;
  7. using System.ConsoleApp.Drawing;
  8. using Keln.Progress;
  9. using Keln.Progress.EventHandler;
  10. namespace Keln {
  11. class Program {
  12. public static Dictionary<string, ProcessInfo> processes = new Dictionary<string, ProcessInfo>();
  13. //public static HttpApiServer api;
  14. public static ApiServer api;
  15. /*private static Console_LabelDescription lblDeviceEmotion;
  16. private static Console_LabelDescription lblIntensi;
  17. private static Console_LabelDescription lblSambale;
  18. private static Console_LabelDescription lblSozoti;
  19. private static Console_LabelDescription lblSpeech;
  20. private static Console_LabelDescription lblGregorCalendus;*/
  21. private static Console_TableRow lblDeviceEmotion;
  22. private static Console_TableRow lblIntensi;
  23. private static Console_TableRow lblSambale;
  24. private static Console_TableRow lblSozoti;
  25. private static Console_TableRow lblSpeech;
  26. private static Console_TableRow lblGregorCalendus;
  27. static void Main(string[] args) {
  28. string cmd = "deviceemotion 192.168.0.1 -port 80 -referer http://google.com -boolisch -b2 -t Hallo Welt -file device-emotion.exe";
  29. System.Diagnostics.Process[] localAll = System.Diagnostics.Process.GetProcesses();
  30. foreach(System.Diagnostics.Process p in localAll) {
  31. //System.Diagnostics.Debug.WriteLine(p.);
  32. }
  33. //System.ConsoleApp.ConsoleAdvanced.WriteJson("{\"Herausgeber\": \"Xema\",\"Nummer\": \"1234-5678-9012-3456\",\"Deckung\": 2e+6,\"Waehrung\": \"EURO\",\"Inhaber\":{\"Name\": \"Mustermann\",\"Vorname\": \"Max\",\"Größe\": 1.92,\"Zitat\":\"Das Haus \\\"Sozi\\\" ist das Beste\",\"maennlich\": true,\"Hobbys\": [\"Reiten\", \"Golfen\", \"Lesen\"],\"Alter\": 42,\"Kinder\": [],\"Partner\": null }}");
  34. // Start Api Server
  35. iniHandle config = new iniHandle("config/services.conf");
  36. ushort port = config["Keln"]["Port"].UInt16;
  37. if (port == 0)
  38. port = 8010;
  39. //api = new HttpApiServer("./www", port);
  40. api = new ApiServer("./www", port);
  41. System.Timers.Timer tmrUpdateMemory = new System.Timers.Timer(5000);
  42. tmrUpdateMemory.AutoReset = true;
  43. tmrUpdateMemory.Elapsed += TmrUpdateMemory_Elapsed;
  44. tmrUpdateMemory.Enabled = true;
  45. tmrUpdateMemory.Start();
  46. System.Timers.Timer tmrAvailable = new System.Timers.Timer(30000);
  47. tmrAvailable.AutoReset = true;
  48. tmrAvailable.Elapsed += TmrAvailable_Elapsed;
  49. tmrAvailable.Enabled = true;
  50. tmrAvailable.Start();
  51. Console_Window servicewin = new Console_Window(new ConsoleRect(2, 2, 102, 13), "Services");
  52. Console_Label lblServiceTitle = new Console_Label(servicewin, new ConsoleRect(1, 0, 60, 1), "List of services");
  53. /*lblDeviceEmotion = new Console_LabelDescription(servicewin, new ConsoleRect(1, 1, 60, 1), "DeviceEmotion");
  54. lblIntensi = new Console_LabelDescription(servicewin, new ConsoleRect(1, 2, 60, 1), "Intensi");
  55. lblSambale = new Console_LabelDescription(servicewin, new ConsoleRect(1, 3, 60, 1), "Sambale");
  56. lblSozoti = new Console_LabelDescription(servicewin, new ConsoleRect(1, 4, 60, 1), "Sozoti");
  57. lblSpeech = new Console_LabelDescription(servicewin, new ConsoleRect(1, 5, 60, 1), "Speech");
  58. lblGregorCalendus = new Console_LabelDescription(servicewin, new ConsoleRect(1, 6, 60, 1), "GregorCalendus");*/
  59. lblDeviceEmotion = new Console_TableRow(servicewin, new ConsoleRect(1, 1, 60, 1), new Console_TableCell[] {
  60. new Console_TableCell() { value = "DeviceEmotion", width = 20, Color = ConsoleColor.White },
  61. new Console_TableCell() { value = "Not Running", width = 15, Color = ConsoleColor.Red },
  62. new Console_TableCell() { value = "Not available", width = 15, Color = ConsoleColor.Red },
  63. new Console_TableCell() { value = config["DeviceEmotion"]["Host"].Value+":"+config["DeviceEmotion"]["Port"].Value, width = 30, Color = ConsoleColor.White },
  64. new Console_TableCell() { value = "0,00 MB", width = 12, Color = ConsoleColor.White, Align = Console_TableCell.TextAlign.Right }
  65. });
  66. lblIntensi = new Console_TableRow(servicewin, new ConsoleRect(1, 2, 60, 1), new Console_TableCell[] {
  67. new Console_TableCell() { value = "Intensi", width = 20, Color = ConsoleColor.White },
  68. new Console_TableCell() { value = "Not Running", width = 15, Color = ConsoleColor.Red },
  69. new Console_TableCell() { value = "Not available", width = 15, Color = ConsoleColor.Red },
  70. new Console_TableCell() { value = config["Intensi"]["Host"].Value+":"+config["Intensi"]["Port"].Value, width = 30, Color = ConsoleColor.White },
  71. new Console_TableCell() { value = "0,00 MB", width = 12, Color = ConsoleColor.White, Align = Console_TableCell.TextAlign.Right }
  72. });
  73. lblSambale = new Console_TableRow(servicewin, new ConsoleRect(1, 3, 60, 1), new Console_TableCell[] {
  74. new Console_TableCell() { value = "Sambale", width = 20, Color = ConsoleColor.White },
  75. new Console_TableCell() { value = "Not Running", width = 15, Color = ConsoleColor.Red },
  76. new Console_TableCell() { value = "Not available", width = 15, Color = ConsoleColor.Red },
  77. new Console_TableCell() { value = config["Sambale"]["Host"].Value+":"+config["Sambale"]["Port"].Value, width = 30, Color = ConsoleColor.White },
  78. new Console_TableCell() { value = "0,00 MB", width = 12, Color = ConsoleColor.White, Align = Console_TableCell.TextAlign.Right }
  79. });
  80. lblSozoti = new Console_TableRow(servicewin, new ConsoleRect(1, 4, 60, 1), new Console_TableCell[] {
  81. new Console_TableCell() { value = "Sozoti", width = 20, Color = ConsoleColor.White },
  82. new Console_TableCell() { value = "Not Running", width = 15, Color = ConsoleColor.Red },
  83. new Console_TableCell() { value = "Not available", width = 15, Color = ConsoleColor.Red },
  84. new Console_TableCell() { value = config["Sozoti"]["Host"].Value+":"+config["Sozoti"]["Port"].Value, width = 30, Color = ConsoleColor.White },
  85. new Console_TableCell() { value = "0,00 MB", width = 12, Color = ConsoleColor.White, Align = Console_TableCell.TextAlign.Right }
  86. });
  87. lblSpeech = new Console_TableRow(servicewin, new ConsoleRect(1, 5, 60, 1), new Console_TableCell[] {
  88. new Console_TableCell() { value = "Speech", width = 20, Color = ConsoleColor.White },
  89. new Console_TableCell() { value = "Not Running", width = 15, Color = ConsoleColor.Red },
  90. new Console_TableCell() { value = "Not available", width = 15, Color = ConsoleColor.Red },
  91. new Console_TableCell() { value = config["Speech"]["Host"].Value+":"+config["Speech"]["Port"].Value, width = 30, Color = ConsoleColor.White },
  92. new Console_TableCell() { value = "0,00 MB", width = 12, Color = ConsoleColor.White, Align = Console_TableCell.TextAlign.Right }
  93. });
  94. lblGregorCalendus = new Console_TableRow(servicewin, new ConsoleRect(1, 6, 60, 1), new Console_TableCell[] {
  95. new Console_TableCell() { value = "GregorCalendus", width = 20, Color = ConsoleColor.White },
  96. new Console_TableCell() { value = "Not Running", width = 15, Color = ConsoleColor.Red },
  97. new Console_TableCell() { value = "Not available", width = 15, Color = ConsoleColor.Red },
  98. new Console_TableCell() { value = config["GregorCalendus"]["Host"].Value+":"+config["GregorCalendus"]["Port"].Value, width = 30, Color = ConsoleColor.White },
  99. new Console_TableCell() { value = "0,00 MB", width = 12, Color = ConsoleColor.White, Align = Console_TableCell.TextAlign.Right }
  100. });
  101. Console_Progressbar progress = new Console_Progressbar(servicewin, new ConsoleRect(0, 8, 78, 1), Console_Progressbar.TextStyle.Percent);
  102. Console.CursorTop += 15;
  103. progress.Max = 10;
  104. progress.Min = 0;
  105. api.Start();
  106. progress.Value++;
  107. /*VHostServer vhost = new VHostServer(80);
  108. vhost.Redirects.Add(new VHostRedirect("localhost", 8000, new VHostRedirectCondition[] {
  109. new VHostRedirectCondition(VHostRedirectCondition.eVaraible.Host, "^(?<host>deviceemotion\\.zoe\\.de)$")
  110. }));
  111. vhost.Redirects.Add(new VHostRedirect("localhost", 8001, new VHostRedirectCondition[] {
  112. new VHostRedirectCondition(VHostRedirectCondition.eVaraible.Host, "^(?<host>intensi\\.zoe\\.de)$")
  113. }));
  114. vhost.Redirects.Add(new VHostRedirect("localhost", 8002, new VHostRedirectCondition[] {
  115. new VHostRedirectCondition(VHostRedirectCondition.eVaraible.Host, "^(?<host>sambale\\.zoe\\.de)$")
  116. }));
  117. vhost.Redirects.Add(new VHostRedirect("localhost", 8003, new VHostRedirectCondition[] {
  118. new VHostRedirectCondition(VHostRedirectCondition.eVaraible.Host, "^(?<host>sozoti\\.zoe\\.de)$")
  119. }));
  120. vhost.Redirects.Add(new VHostRedirect("localhost", 8004, new VHostRedirectCondition[] {
  121. new VHostRedirectCondition(VHostRedirectCondition.eVaraible.Host, "^(?<host>speech\\.zoe\\.de)$")
  122. }));
  123. vhost.Start();*/
  124. processes.Add("deviceemotion", new ProcessInfo("DeviceEmotion.exe", true, DeviceEmotion_StateChange));
  125. progress.Value++;
  126. processes.Add("intensi", new ProcessInfo("Intensi.exe", true, Intensi_StateChange));
  127. progress.Value++;
  128. processes.Add("sambale", new ProcessInfo("Sambale.exe", true, Sambale_StateChange));
  129. progress.Value++;
  130. processes.Add("sozoti", new ProcessInfo("Sozoti.exe", true, Sozoti_StateChange));
  131. progress.Value++;
  132. processes.Add("speech", new ProcessInfo("Speech.exe", true, Speech_StateChange));
  133. progress.Value++;
  134. processes.Add("gregor", new ProcessInfo("GregorCalendus.exe", true,GregorCalendus_StateChange));
  135. progress.Value = progress.Max;
  136. System.ConsoleApp.ConsoleAdvanced.Run("Keln");
  137. tmrUpdateMemory.Enabled = false;
  138. tmrUpdateMemory.Stop();
  139. tmrUpdateMemory.Dispose();
  140. foreach(KeyValuePair<string, ProcessInfo> kv in processes) {
  141. kv.Value.Stop();
  142. }
  143. api.Stop();
  144. }
  145. private static void TmrUpdateMemory_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
  146. RefreshMemory(lblDeviceEmotion, "deviceemotion");
  147. RefreshMemory(lblIntensi, "intensi");
  148. RefreshMemory(lblSambale, "sambale");
  149. RefreshMemory(lblSozoti, "sozoti");
  150. RefreshMemory(lblSpeech, "speech");
  151. RefreshMemory(lblGregorCalendus, "gregor");
  152. }
  153. private static void TmrAvailable_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
  154. CheckAvailable(lblDeviceEmotion, Leah.Client.eService.DeviceEmotion);
  155. CheckAvailable(lblIntensi, Leah.Client.eService.Intensi);
  156. CheckAvailable(lblSambale, Leah.Client.eService.Sambale);
  157. CheckAvailable(lblSozoti, Leah.Client.eService.Sozoti);
  158. CheckAvailable(lblSpeech, Leah.Client.eService.Speech);
  159. CheckAvailable(lblGregorCalendus, Leah.Client.eService.GregorCalendus);
  160. }
  161. private static void CheckAvailable(Console_TableRow lbl, Leah.Client.eService service) {
  162. lbl.SetValue(2, "Checking...", ConsoleColor.Yellow);
  163. string host = Leah.Client.GetHostPort(service);
  164. //My.Computer.Network.Ping("192.168.2.10:21")
  165. string res_Gregor = Leah.Client.GetString(service, "/ping");
  166. if (res_Gregor == "pong")
  167. lbl.SetValue(2, "Available", ConsoleColor.Green);
  168. else
  169. lbl.SetValue(2, "Not available", ConsoleColor.Red);
  170. }
  171. private static void DeviceEmotion_StateChange(object sender, StateChangeEventArgs e) {
  172. RefreshState(lblDeviceEmotion, e.State);
  173. RefreshMemory(lblDeviceEmotion, "deviceemotion");
  174. }
  175. private static void Intensi_StateChange(object sender, StateChangeEventArgs e) {
  176. RefreshState(lblIntensi, e.State);
  177. RefreshMemory(lblIntensi, "intensi");
  178. }
  179. private static void Sambale_StateChange(object sender, StateChangeEventArgs e) {
  180. RefreshState(lblSambale, e.State);
  181. RefreshMemory(lblSambale, "sambale");
  182. }
  183. private static void Sozoti_StateChange(object sender, StateChangeEventArgs e) {
  184. RefreshState(lblSozoti, e.State);
  185. RefreshMemory(lblSozoti, "sozoti");
  186. }
  187. private static void Speech_StateChange(object sender, StateChangeEventArgs e) {
  188. RefreshState(lblSpeech, e.State);
  189. RefreshMemory(lblSpeech, "speech");
  190. }
  191. private static void GregorCalendus_StateChange(object sender, StateChangeEventArgs e) {
  192. RefreshState(lblGregorCalendus, e.State);
  193. RefreshMemory(lblGregorCalendus, "gregor");
  194. }
  195. public static void RefreshMemory(Console_TableRow lbl, string processName) {
  196. //lbl.Text[2] = Math.Round((decimal)processes[processName].PagedMemorySize64 / 1048576,2).ToString() + " MB";
  197. if(processes.ContainsKey(processName))
  198. lbl.SetValue(4, Math.Round((decimal)processes[processName].PagedMemorySize64 / 1048576, 2).ToString() + " MB");
  199. else
  200. lbl.SetValue(4, "- MB");
  201. }
  202. public static void RefreshState(Console_TableRow lbl, eState state) {
  203. switch (state) {
  204. case eState.Restart:
  205. lbl.SetValue(1, "Restart", ConsoleColor.Yellow);
  206. break;
  207. case eState.Running:
  208. lbl.SetValue(1, "Running", ConsoleColor.Green);
  209. break;
  210. case eState.Stopped:
  211. lbl.SetValue(1, "Stopped", ConsoleColor.Red);
  212. break;
  213. case eState.Stopping:
  214. lbl.SetValue(1, "Stopping", ConsoleColor.Red);
  215. break;
  216. case eState.Update:
  217. lbl.SetValue(1, "Update", ConsoleColor.Yellow);
  218. break;
  219. case eState.NotRunning:
  220. lbl.SetValue(1, "Not running", ConsoleColor.Red);
  221. break;
  222. case eState.Already_Running:
  223. lbl.SetValue(1, "Application", ConsoleColor.Green);
  224. break;
  225. case eState.Service:
  226. lbl.SetValue(1, "Service", ConsoleColor.Green);
  227. break;
  228. }
  229. }
  230. private static void RefreshState(Console_LabelDescription lbl, eState state) {
  231. switch (state) {
  232. case eState.Restart:
  233. lbl.ValueColor = ConsoleColor.Yellow;
  234. lbl.Value = "Restart";
  235. break;
  236. case eState.Running:
  237. lbl.ValueColor = ConsoleColor.Green;
  238. lbl.Value = "Running";
  239. break;
  240. case eState.Stopped:
  241. lbl.ValueColor = ConsoleColor.Red;
  242. lbl.Value = "Stopped";
  243. break;
  244. case eState.Stopping:
  245. lbl.ValueColor = ConsoleColor.Red;
  246. lbl.Value = "Stopping";
  247. break;
  248. case eState.Update:
  249. lbl.ValueColor = ConsoleColor.Yellow;
  250. lbl.Value = "Update";
  251. break;
  252. case eState.NotRunning:
  253. lbl.ValueColor = ConsoleColor.Red;
  254. lbl.Value = "Not running";
  255. break;
  256. }
  257. }
  258. }
  259. }