Feature #106 MediaCubeAPI bővítése szinkron folyamat futtatással
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 26 Nov 2018 15:34:59 +0000 (15:34 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 26 Nov 2018 15:34:59 +0000 (15:34 +0000)
git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31351

client/Maestro/Configuration/configuration - Copy.json
client/Maestro/Configuration/configuration.json
client/Maestro/Program.cs
client/MediaCubeClient/MediaCubeApi.cs
client/MediaCubeClient/MediaCubeClient.csproj
client/MediaCubeClient/MediaCubeStrings.cs [new file with mode: 0644]
client/MediaCubeClient/MediaCubeWSApi.cs [new file with mode: 0644]
client/MediaCubeClient/NexioAPI.cs

index 1e964867112ec63a95b7d24889bec0ef1b30f450..8a54c54bf99b9dc41ce1c1e8523606c8c02e4890 100644 (file)
@@ -1,6 +1,6 @@
 {\r
   "title": "Development",\r
-  "active": false,\r
+  "active": true,\r
   "startInTray": false,\r
   "enableCustomMetadataId": true,\r
   "filter": "avi",\r
@@ -10,7 +10,7 @@
     "$type": "NEXIOSource",\r
     "hideEmpty":  true,\r
     "local": {\r
-      "address": "ws://10.10.1.27/services/nexio"\r
+      "address": "ws://localhost:8888/services/nexio"\r
     },\r
     "remote": {\r
       "address": "ftp://10.10.1.55:2098",\r
@@ -38,7 +38,7 @@
     {\r
       "$type": "MediaCubeMetadata",\r
       "server": {\r
-        "address": "http://10.10.1.27/services/rest/jobengine",\r
+        "address": "http://localhost:8888/services/rest/jobengine",\r
         "userName": "mediacube",\r
         "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
         "timeout": 1000\r
index 24c4828a5dae57f4a0e479bfc732472df749830a..f755d8f760ec6c05ef95242a95e4940396e916ff 100644 (file)
@@ -1,6 +1,6 @@
 {\r
   "title": "Development",\r
-  "active": true,\r
+  "active": false,\r
   "startInTray": false,\r
   "enableCustomMetadataId": true,\r
   "filter": "avi",\r
index 628f7e0bb92986c3666e1bdefcd1799e46edeb61..bd05c20b902cd2b98e9f140e3b238bfe3775e3a0 100644 (file)
@@ -2,10 +2,13 @@
 using LinkDotNet.MessageHandling.Contracts;\r
 using Maestro.Properties;\r
 using MaestroShared.Configuration;\r
+using MediaCubeClient;\r
+using Newtonsoft.Json.Linq;\r
 using NLog;\r
 using System;\r
 using System.Collections.Concurrent;\r
 using System.Collections.Generic;\r
+using System.Diagnostics;\r
 using System.DirectoryServices.AccountManagement;\r
 using System.IO;\r
 using System.Linq;\r
@@ -29,14 +32,32 @@ namespace Maestro {
         [STAThread]\r
         [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]\r
         static void Main() {\r
+\r
+            IMessageBus mb = new MessageBus();\r
+            mb.Subscribe<MediaCubeWSMessage>(m => {\r
+                if (m.Finished) {\r
+                    if (!string.IsNullOrEmpty(m.Content))\r
+                        Debug.WriteLine("Error " + m.Content);\r
+                    Debug.WriteLine("Finished");\r
+                } else\r
+                    Debug.WriteLine("Progress " + m.Data.As<int>("progress"));\r
+            });\r
+            MediaCubeWSApi c = new MediaCubeWSApi("ws://localhost:8888/services/wsapi", mb);\r
+            JObject data = new JObject();\r
+            data.Add("itemID", JToken.FromObject(0));\r
+            data.Add("resultID", JToken.FromObject(0));\r
+            c.SubmitJob("fake.xml", data);\r
+            Thread.Sleep(1000000);\r
+            return;\r
+\r
+\r
             string appGuid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), false).GetValue(0)).Value.ToString();\r
             string userName = WindowsIdentity.GetCurrent().Name;\r
             string mutexId = string.Format("Global\\{0}-{1}", appGuid, userName.Replace('\\', '-'));\r
-            bool createdNew;\r
             var allowEveryoneRule = new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MutexRights.FullControl, AccessControlType.Allow);\r
             var securitySettings = new MutexSecurity();\r
             securitySettings.AddAccessRule(allowEveryoneRule);\r
-            using (var mutex = new Mutex(false, mutexId, out createdNew, securitySettings)) {\r
+            using (var mutex = new Mutex(false, mutexId, out bool createdNew, securitySettings)) {\r
                 var hasHandle = false;\r
                 bool enableInstance = TrayApplicationContext.HasCommandlineParameter(TrayApplicationContext.NOSINGLE);\r
                 try {\r
@@ -46,16 +67,14 @@ namespace Maestro {
                             if (hasHandle == false)\r
                                 MessageBox.Show("A MediaCube Maestro alkalmazás már fut egy példányban.");\r
                         }\r
-                    }\r
-                    catch (AbandonedMutexException) {\r
+                    } catch (AbandonedMutexException) {\r
                         hasHandle = true;\r
                     }\r
-                }\r
-                finally {\r
+                } finally {\r
                     if (hasHandle || enableInstance) {\r
                         TrayApplicationContext context = null;\r
                         try {\r
-                            Application.ThreadException += (s,e) => {\r
+                            Application.ThreadException += (s, e) => {\r
                                 logger.Error(e);\r
                                 MessageBox.Show(new Form() { TopMost = true }, e.Exception?.Message);\r
                             };\r
@@ -68,12 +87,10 @@ namespace Maestro {
                             context = new TrayApplicationContext();\r
                             context.Start();\r
                             Application.Run(context);\r
-                        }\r
-                        catch (Exception e) {\r
+                        } catch (Exception e) {\r
                             logger.Error(e);\r
                             MessageBox.Show(new Form() { TopMost = true }, e.Message);\r
-                        }\r
-                        finally {\r
+                        } finally {\r
                             if (hasHandle)\r
                                 mutex.ReleaseMutex();\r
                             if (context != null)\r
@@ -105,7 +122,7 @@ namespace Maestro {
         private const string HYPHEN = "-";\r
         private NotifyIcon trayIcon;\r
         private ConcurrentBag<MeastroFormNotifyIcon> forms = new ConcurrentBag<MeastroFormNotifyIcon>();\r
-        private IMessageBus messageBus = new MessageBus();\r
+        private readonly IMessageBus messageBus = new MessageBus();\r
 \r
         public static string UserName { get; set; }\r
         public static GlobalInfo GlobalConfig { get; internal set; }\r
@@ -134,14 +151,14 @@ namespace Maestro {
                 throw new Exception(CONFIG_ERROR);\r
 \r
             GlobalConfig = LoadGlobalConfig(configFiles);\r
-            \r
+\r
             CheckUser();\r
             CreateForms(configFiles);\r
             CreateTrayIcon();\r
         }\r
 \r
         private void CreateForms(string[] configFiles) {\r
-            foreach (String file in configFiles) {\r
+            foreach (string file in configFiles) {\r
                 string audioRecorderFile = ConfigurationSerializer.Combine(AUDIORECORDER_JSON);\r
                 if (file.ToLower().Equals(audioRecorderFile.ToLower()))\r
                     continue;\r
@@ -224,8 +241,7 @@ namespace Maestro {
                             password = loginForm.Password;\r
                         }\r
                     }\r
-                }\r
-                catch (Exception e) {\r
+                } catch (Exception e) {\r
                     throw new Exception("Hiba a hitelesítő adatok lekérdezésekor. A rendszer üzenete: " + e.Message);\r
                 }\r
 \r
@@ -244,8 +260,7 @@ namespace Maestro {
                     form.ShowFormMinimized();\r
                 else\r
                     form.ShowForm();\r
-            }\r
-            catch (Exception e) {\r
+            } catch (Exception e) {\r
                 logger.Error(e);\r
                 MessageBox.Show(e.Message);\r
             }\r
index 3efdd14efc655e90b650be2fb37ef7496ba47454..de5433027b5b14c963055f334be4118288702040 100644 (file)
@@ -1,3 +1,6 @@
+using LinkDotNet.MessageHandling.Contracts;\r
+using MaestroShared.Interfaces;\r
+using MaestroShared.MessageBus;\r
 using Newtonsoft.Json;\r
 using Newtonsoft.Json.Serialization;\r
 using NLog;\r
@@ -7,9 +10,6 @@ using System;
 using System.Diagnostics;\r
 using System.Net;\r
 using System.Runtime.Serialization;\r
-using LinkDotNet.MessageHandling.Contracts;\r
-using MaestroShared.MessageBus;\r
-using MaestroShared.Interfaces;\r
 \r
 namespace MediaCubeClient {\r
     public class MediaCubeMessage : MaestroMessage {\r
@@ -25,6 +25,7 @@ namespace MediaCubeClient {
         private string user;\r
         private string pwd;\r
         private IMessageBus messageBus;\r
+        private object template;\r
 \r
         public MediaCubeApi(string address, string user, string pwd, int timeout, IMessageBus messageBus) {\r
             this.user = user;\r
@@ -43,7 +44,7 @@ namespace MediaCubeClient {
 \r
         public T Create<T>(object data) {\r
             var request = new RestRequest("create", Method.POST);\r
-            String body = JsonConvert.SerializeObject(data, serializerSettings);\r
+            string body = JsonConvert.SerializeObject(data, serializerSettings);\r
             //Debug.WriteLine(body);\r
             request.AddParameter("application/json", body, ParameterType.RequestBody);\r
             var response = client.Execute(request);\r
index fb4c22d5800ee0d7a0f37d42a94ae2111afc47ea..b59eb955e8400d49eba1f81fc9352866dc9de71e 100644 (file)
     </Reference>\r
   </ItemGroup>\r
   <ItemGroup>\r
+    <Compile Include="MediaCubeWSApi.cs" />\r
     <Compile Include="MediaCubeApi.cs" />\r
+    <Compile Include="MediaCubeStrings.cs" />\r
     <Compile Include="NexioAPI.cs" />\r
     <Compile Include="Properties\AssemblyInfo.cs" />\r
   </ItemGroup>\r
diff --git a/client/MediaCubeClient/MediaCubeStrings.cs b/client/MediaCubeClient/MediaCubeStrings.cs
new file mode 100644 (file)
index 0000000..85667f8
--- /dev/null
@@ -0,0 +1,11 @@
+namespace MediaCubeClient {\r
+    class MediaCubeStrings {\r
+        public static readonly string ACTION = "action";\r
+        public static readonly string LIST = "list";\r
+        public static readonly string STARTJOB = "startjob";\r
+        public static readonly string ERROR = "error";\r
+        public static readonly string STATUS = "status";\r
+        public static readonly string TEMPLATE = "template";\r
+        public static readonly string PARAMETERS = "parameters";\r
+    }\r
+}\r
diff --git a/client/MediaCubeClient/MediaCubeWSApi.cs b/client/MediaCubeClient/MediaCubeWSApi.cs
new file mode 100644 (file)
index 0000000..bdf7be3
--- /dev/null
@@ -0,0 +1,114 @@
+using LinkDotNet.MessageHandling.Contracts;\r
+using MaestroShared.MessageBus;\r
+using Newtonsoft.Json;\r
+using Newtonsoft.Json.Linq;\r
+using NLog;\r
+using System;\r
+using WebSocketSharp;\r
+\r
+namespace MediaCubeClient {\r
+    public class MediaCubeWSMessage : MaestroMessage {\r
+        public bool Finished { get; }\r
+        public JObject Data { get; }\r
+\r
+        public MediaCubeWSMessage() : base(null) {\r
+            Finished = true;\r
+        }\r
+\r
+        public MediaCubeWSMessage(string message) : base(message) {\r
+            Finished = true;\r
+        }\r
+\r
+        public MediaCubeWSMessage(JObject data) : base(null) {\r
+            Data = data;\r
+        }\r
+\r
+    }\r
+\r
+    public class MediaCubeWSApi {\r
+        private const string DATEFORMAT = "yyyy'-'MM'-'dd'T'HH':'mm':'ssK";\r
+        private static NLog.Logger logger = LogManager.GetCurrentClassLogger();\r
+        private JsonSerializerSettings serializerSettings;\r
+        private readonly string address;\r
+        private IMessageBus messageBus;\r
+\r
+        public MediaCubeWSApi(string address, IMessageBus messageBus) {\r
+            this.address = address;\r
+            this.messageBus = messageBus;\r
+            serializerSettings = new JsonSerializerSettings {\r
+                TypeNameHandling = TypeNameHandling.Objects,\r
+                SerializationBinder = new TypeNameSerializationBinder(),\r
+                DateFormatString = DATEFORMAT\r
+            };\r
+        }\r
+        /*\r
+                public T Create<T>(object data) {\r
+                    var request = new RestRequest("create", Method.POST);\r
+                    string body = JsonConvert.SerializeObject(data, serializerSettings);\r
+                    //Debug.WriteLine(body);\r
+                    request.AddParameter("application/json", body, ParameterType.RequestBody);\r
+                    var response = client.Execute(request);\r
+                    if (response.StatusCode != HttpStatusCode.OK && response.ErrorMessage != null) {\r
+                        messageBus.Send(new MediaCubeMessage("Sikertelen kapcsolódás a MediaCube rendszerhez."));\r
+                        return default(T);\r
+                    }\r
+                    //Debug.WriteLine(response.Content);\r
+                    var result = JsonConvert.DeserializeObject<T>(response.Content);\r
+                    return result;\r
+                }\r
+        */\r
+        public void SubmitJob(string template, JObject parameters) {\r
+            WebSocket ws = new WebSocket(address);\r
+            ws.SslConfiguration.ServerCertificateValidationCallback = (s, c, ch, e) => {\r
+                return true;\r
+            };\r
+            ws.OnMessage += (s, e) => {\r
+                JObject jo = JObject.Parse(e.Data);\r
+                if (true.Equals(jo.As<bool>(MediaCubeStrings.ERROR))) {\r
+                    ws.Close();\r
+                    messageBus.Send(new MediaCubeWSMessage("Hiba a MediaCube szolgáltatás használata során. A rendszer üzenete: " + jo.As<string>(MediaCubeStrings.ERROR)));\r
+                    return;\r
+                }\r
+                if ("FINISHED".Equals(jo.As<string>(MediaCubeStrings.STATUS))) {\r
+                    ws.Close();\r
+                    messageBus.Send(new MediaCubeWSMessage());\r
+                    return;\r
+                }\r
+                messageBus.Send(new MediaCubeWSMessage(jo));\r
+            };\r
+            ws.OnError += (s, e) => {\r
+                ws.Close();\r
+                messageBus.Send(new MediaCubeWSMessage("Hiba a MediaCube szolgáltatás használata során. A rendszer üzenete: " + e.Message));\r
+            };\r
+\r
+            try {\r
+                ws.Connect();\r
+            } catch {\r
+                ws.Close();\r
+                messageBus.Send(new MediaCubeWSMessage("Sikertelen kapcsolódás a MediaCube szolgáltatáshoz."));\r
+            }\r
+            try {\r
+                JObject data = new JObject();\r
+                data.Add(MediaCubeStrings.ACTION, JToken.FromObject(MediaCubeStrings.STARTJOB));\r
+                data.Add(MediaCubeStrings.TEMPLATE, JToken.FromObject(template));\r
+                data.Add(MediaCubeStrings.PARAMETERS, JToken.FromObject(parameters));\r
+                ws.Send(data.ToString());\r
+            } catch (Exception e) {\r
+                ws.Close();\r
+                messageBus.Send(new MediaCubeWSMessage("Sikertelen MediaCube folyamatindítás."));\r
+            }\r
+        }\r
+\r
+\r
+    }\r
+\r
+}\r
+\r
+\r
+public static class JObjectValues {\r
+\r
+    public static T As<T>(this JObject jo, string field) {\r
+        JToken jToken = jo.GetValue(field);\r
+        return jToken == null ? default(T) : jToken.Value<T>();\r
+    }\r
+}\r
index 55319e341601ce259e64b443173660a483959c24..027b63489b9ab083544360f3dce390a0f63402f0 100644 (file)
@@ -1,9 +1,9 @@
+using LinkDotNet.MessageHandling.Contracts;\r
+using MediaCubeClient;\r
 using Newtonsoft.Json.Linq;\r
 using System;\r
 using System.Diagnostics;\r
 using WebSocketSharp;\r
-using LinkDotNet.MessageHandling.Contracts;\r
-using MediaCubeClient;\r
 \r
 namespace NexioClient {\r
     public class NexioAPI {\r
@@ -17,7 +17,7 @@ namespace NexioClient {
         private string path;\r
         private IMessageBus messageBus;\r
 \r
-        public NexioAPI(String path, IMessageBus messageBus) {\r
+        public NexioAPI(string path, IMessageBus messageBus) {\r
             this.path = path;\r
             this.messageBus = messageBus;\r
         }\r
@@ -51,8 +51,7 @@ namespace NexioClient {
                 Debug.WriteLine("OnClose: " + e.Reason);\r
             try {\r
                 ws.Connect();\r
-            }\r
-            catch (Exception e) {\r
+            } catch (Exception e) {\r
                 messageBus.Send(new MediaCubeMessage("Sikertelen kapcsolódás a MediaCube NEXIO szolgáltatásához."));\r
             }\r
         }\r
@@ -62,8 +61,7 @@ namespace NexioClient {
             data.Add(ACTION, JToken.FromObject(LIST));\r
             try {\r
                 ws.Send(data.ToString());\r
-            }\r
-            catch (Exception e) {\r
+            } catch (Exception e) {\r
                 messageBus.Send(new MediaCubeMessage("Sikertelen inicializálás a MediaCube NEXIO szolgáltatásában."));\r
             }\r
         }\r