예제 #1
0
 /// <summary>
 /// Show A Finsemble Component.
 /// </summary>
 /// <param name="windowIdentifier">A JObject containing a windowName, uuid and componentType</param>
 /// <param name="parameters"></param>
 /// <param name="callback"></param>
 public void ShowWindow(JObject windowIdentifier, JObject parameters, EventHandler <FinsembleEventArgs> callback)
 {
     parameters["windowIdentifier"] = windowIdentifier;
     parameters["relativeWindow"]   = windowClient.windowIdentifier;
     routerClient.Query("Launcher.showWindow", parameters, new JObject {
     }, callback);
 }
예제 #2
0
 /// <summary>
 /// parameters is a JObject containing the field
 /// callback is called with the value
 /// </summary>
 /// <example>
 /// <code>
 /// bridge.configClient.GetValue(new JObject {["field"] = "fieldname"}, (sender, args) => {
 ///     var fieldValue = args.response
 /// })
 /// </code>
 /// </example>
 /// <param name="parameters"></param>
 /// <param name="callback"></param>
 public void GetValue(JObject parameters, EventHandler <FinsembleEventArgs> callback)
 {
     routerClient.Query("configService.getValue", new JObject
     {
         ["field"] = parameters["field"]
     }, new JObject {
     }, callback);
 }
예제 #3
0
        /// <summary>
        /// Sets a value in a distributed store.
        /// </summary>
        /// <example>
        /// <code>
        ///     store.SetValue(new JObject{["field"] = "field1", ["value"] = "new value"}, (sender, args) => {
        ///         // value was set in store. Nothing needs to be done here.
        ///     });
        /// </code>
        /// </example>
        /// <param name="parameters"></param>
        /// <param name="callback"></param>
        public void SetValue(JObject parameters, EventHandler <FinsembleEventArgs> callback)
        {
            var data = new JObject
            {
                ["store"] = name,
                ["field"] = (string)parameters["field"],
                ["value"] = parameters["value"]
            };

            routerClient.Query("storeService.setValue", data, new JObject {
            }, callback);
        }
예제 #4
0
        private bool disposedValue = false;         // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: dispose managed state (managed objects).
                }

                // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                // TODO: set large fields to null.

                try
                {
                    // Unregister logger.
                    JObject parameters = new JObject
                    {
                        ["clientName"] = bridge.windowName
                    };

                    routerClient.Query("logger.service.unregister", parameters, new JObject {
                    }, (s, a) => { });
                }
                catch
                {
                    // TODO: Log error
                }

                disposedValue = true;
            }
        }
예제 #5
0
 /// <summary>
 /// Returns the current global credentials (as published through PublishAuthorization}) or null if no credentials are set yet.
 /// </summary>
 /// <param name="callback">A function that returns the current credentials. Will return null if no credentials have yet been established.</param>
 public void GetCurrentCredentials <T>(EventHandler <T> callback)
 {
     routerClient.Query("authentication.currentCredentials", new JObject {
     }, new JObject {
     }, (sender, args) => {
         var jCredentials = args.response?["data"];
         T credentials    = jCredentials.ToObject <T>();
         callback(sender, credentials);
     });
 }
예제 #6
0
 public Logger(Finsemble bridge)
 {
     routerClient = bridge.RouterClient;
     this.bridge  = bridge;
     routerClient.Query("logger.service.register", new JObject
     {
         ["clientName"]    = bridge.windowName,
         ["clientChannel"] = "finsemble.logger.client." + bridge.windowName,
         ["uuid"]          = bridge.uuid,
         ["windowName"]    = bridge.windowName
     }, new JObject {
     }, (s, a) => { });
 }
예제 #7
0
        private void Maxmimize()
        {
            Application.Current.Dispatcher.Invoke(delegate             //main thread
            {
                //dockingWindow.WindowState = WindowState.Maximized;
                dynamic props      = new ExpandoObject();
                props.windowName   = dockingWindowName;
                props.windowAction = "maximize";

                /*DH 07/22/19
                 * We have found that WPF windows are not maximized via the normal
                 * system event, and thus the maximize event isn't detected by Assimilation.
                 * Therefore, we must inform the Window Service ourselves, using the same
                 * message that AssimilationService does.*/
                routerClient.Query("WindowService-Request-maximize",
                                   new JObject {
                    ["fromAssimilation"] = true,
                    ["windowIdentifier"] = new JObject {
                        ["name"] = dockingWindowName
                    }
                },
                                   (sender, args) => { });
            });
        }
예제 #8
0
        private void Scrim_PreviewDrop(object sender, DragEventArgs e)
        {
            var jsonData = JObject.Parse(e.Data.GetData(DataFormats.StringFormat).ToString());

            if (jsonData["containsData"] == null)
            {
                routerClient.Query(jsonData["window"] + ".Share", jsonData["emitters"], new JObject {
                }, (s, args) => {
                    HandleSharedData(args.response?["data"] as JObject, ShareMethod.Drop);
                });
            }
            else
            {
                HandleSharedData(jsonData["data"] as JObject, ShareMethod.Drop);
            }
            e.Handled = true;
        }
예제 #9
0
        /// <summary>
        /// Shows the Finsemble Linker Window
        /// </summary>
        /// <param name="left">Left of Linker Window relative to the current window (default 0)</param>
        /// <param name="top">Top of Linker Window relative to the current window (default 30)</param>
        public void ShowLinkerWindow(double left = 0, double top = 30)
        {
            var channelsToSend = new JArray {
            };

            if (channels != null)
            {
                foreach (var item in channels)
                {
                    var channelinfo = allChannels.Where(jt => jt["name"].ToString() == item.ToString())?.First();
                    if (channelinfo != null)
                    {
                        channelsToSend.Add(channelinfo);
                    }
                }
            }
            JObject data = new JObject
            {
                ["channels"]         = channelsToSend,
                ["windowIdentifier"] = windowClient.windowIdentifier
            };

            routerClient.Query("Finsemble.LinkerWindow.SetActiveChannels", data, new JObject {
            }, delegate(object sender, FinsembleEventArgs e)
            {
                Application.Current.Dispatcher.Invoke((Action) delegate //main thread
                {
                    var wi = new JObject
                    {
                        ["componentType"] = "linkerWindow"
                    };
                    var parameters = new JObject
                    {
                        ["position"]        = "relative",
                        ["left"]            = left,
                        ["top"]             = top,
                        ["spawnIfNotFound"] = false
                    };
                    launcherClient.ShowWindow(wi, parameters, (EventHandler <FinsembleEventArgs>) delegate(object s2, FinsembleEventArgs e2) { });
                });
            });
        }
예제 #10
0
 /// <summary>
 /// Get a value from storage.
 /// </summary>
 /// <param name="parameters"></param>
 /// <param name="callback"></param>
 public void Get(JObject parameters, EventHandler <FinsembleEventArgs> callback)
 {
     routerClient.Query("Storage.get", parameters, new JObject {
     }, callback);
 }
예제 #11
0
        private void RPC(string endpoint, List <JToken> args, EventHandler <FinsembleEventArgs> cb)
        {
            switch (endpoint)
            {
            case "RouterClient.transmit":
                RouterClient.Transmit((string)args[0], args[1]);
                break;

            case "RouterClient.addListener":
                RouterClient.AddListener((string)args[0], cb);
                break;

            case "RouterClient.removeListener":
                RouterClient.RemoveListener((string)args[0], cb);
                break;

            case "RouterClient.publish":
                RouterClient.Publish((string)args[0], args[1]);
                break;

            case "RouterClient.subscribe":
                RouterClient.Subscribe((string)args[0], cb);
                break;

            case "RouterClient.unsubscribe":
                RouterClient.Unsubscribe((string)args[0], cb);
                break;

            case "RouterClient.query":
                RouterClient.Query((string)args[0], args[1], args[2] as JObject, cb);
                break;

            case "LinkerClient.publish":
                LinkerClient.Publish(args[0] as JObject);
                break;

            case "LinkerClient.subscribe":
                LinkerClient.Subscribe((string)args[0], cb);
                break;

            case "LauncherClient.spawn":
                LauncherClient.Spawn((string)args[0], args[1] as JObject, cb);
                break;

            case "LauncherClient.showWindow":
                LauncherClient.ShowWindow(args[0] as JObject, args[1] as JObject, cb);
                break;

            case "ConfigClient.getValue":
                ConfigClient.GetValue(args[0] as JObject, cb);
                break;

            case "AuthenticationClient.publishAuthorization":
                authenticationClient.PublishAuthorization <JObject>((string)args[0], args[1] as JObject);
                break;

            case "AuthenticationClient.getCurrentCredentials":
                authenticationClient.GetCurrentCredentials <JObject>((s, a) =>
                {
                    cb(this, new FinsembleEventArgs(null, a));
                });
                break;

            case "Logger.error":
                JToken[] argsArray = args.ToArray();
                logger.Error(argsArray);
                break;

            case "Logger.warn":
                logger.Warn(args.ToArray());
                break;

            case "Logger.log":
                logger.Log(args.ToArray());
                break;

            case "Logger.info":
                logger.Info(args.ToArray());
                break;

            case "Logger.debug":
                logger.Debug(args.ToArray());
                break;

            case "Logger.verbose":
                logger.Verbose(args.ToArray());
                break;

            default:
                throw new Exception("This API does not exist or is not yet supported");
            }
        }