private void Finsemble_Connected(object sender, EventArgs e)
        {
            Debug.WriteLine("FSBL connected");

            Application.Current.Dispatcher.Invoke(() =>
            {
                FinsembleHeader.SetBridge(FSBL);                 // The Header Control needs a connected finsemble instance

                ////Set window title
                FinsembleHeader.GetHandlingService().Title = this.LabelWindowName.Content.ToString();

                //Styling the Finsemble Header
                FinsembleHeader.GetHandlingService().ActiveBackground                   = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().InactiveBackground                 = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().ButtonHoverBackground              = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().InactiveButtonHoverBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().CloseButtonHoverBackground         = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().InactiveCloseButtonHoverBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().DockingButtonDockedBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().TitleForeground  = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));
                FinsembleHeader.GetHandlingService().ButtonForeground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));

                FinsembleHeader.GetHandlingService().ButtonFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 8,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.Normal
                };
                FinsembleHeader.GetHandlingService().TitleFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 12,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.SemiBold
                };

                FSBL.Clients.DragAndDropClient.SetScrim(Scrim);                 // The Scrim Label Control is used for drag and drop.

                Show();
            });

            Debug.Print($"The window \"{this.LabelWindowName.Content}\" is connected to Finsemble.");
        }
Esempio n. 2
0
        private void Finsemble_Connected(object sender, EventArgs e)
        {
            Application.Current.Dispatcher.Invoke(delegate             //main thread
            {
                // Initialize this Window and show it
                InitializeComponent();                 // Initialize after Finsemble is connected
                FinsembleHeader.SetBridge(FSBL);       // The Header Control needs a connected finsemble instance

                //Styling the Finsemble Header
                FinsembleHeader.GetHandlingService().ActiveBackground                   = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().InactiveBackground                 = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().ButtonHoverBackground              = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().InactiveButtonHoverBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().CloseButtonHoverBackground         = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().InactiveCloseButtonHoverBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().DockingButtonDockedBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().TitleForeground  = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));
                FinsembleHeader.GetHandlingService().ButtonForeground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));

                FinsembleHeader.GetHandlingService().ButtonFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 8,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.Normal
                };
                FinsembleHeader.GetHandlingService().TitleFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 12,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.SemiBold
                };

                //Set window title
                FinsembleHeader.GetHandlingService().Title = "Notify Example Component";

                this.Show();
            });
        }
        public void SetFinsemble(Finsemble fsbl)
        {
            this.fsbl = fsbl;

            Application.Current.Dispatcher.Invoke(() =>
            {
                FinsembleHeader.SetBridge(fsbl);                 // The Header Control needs a connected finsemble instance

                //Styling the Finsemble Header
                FinsembleHeader.GetHandlingService().ActiveBackground                   = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().InactiveBackground                 = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().ButtonHoverBackground              = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().InactiveButtonHoverBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().CloseButtonHoverBackground         = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().InactiveCloseButtonHoverBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().DockingButtonDockedBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().TitleForeground  = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));
                FinsembleHeader.GetHandlingService().ButtonForeground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));

                FinsembleHeader.GetHandlingService().ButtonFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 8,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.Normal
                };
                FinsembleHeader.GetHandlingService().TitleFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 12,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.SemiBold
                };

                fsbl.DragAndDropClient.SetScrim(Scrim);                 // The Scrim Label Control is used for drag and drop.

                Show();
            });
        }
Esempio n. 4
0
        private void Finsemble_Connected(object sender, EventArgs e)
        {
            Application.Current.Dispatcher.Invoke(delegate             //main thread
            {
                // Initialize this Window and show it
                InitializeComponent();                 // Initialize after Finsemble is connected
                FinsembleHeader.SetBridge(FSBL);       // The Header Control needs a connected finsemble instance

                //Styling the Finsemble Header

                FinsembleHeader.GetHandlingService().ActiveBackground                   = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().InactiveBackground                 = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().ButtonHoverBackground              = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().InactiveButtonHoverBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().CloseButtonHoverBackground         = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().InactiveCloseButtonHoverBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().DockingButtonDockedBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().TitleForeground  = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));
                FinsembleHeader.GetHandlingService().ButtonForeground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));

                FinsembleHeader.GetHandlingService().ButtonFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 8,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.Normal
                };
                FinsembleHeader.GetHandlingService().TitleFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 12,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.SemiBold
                };

                //Set window title
                FinsembleHeader.GetHandlingService().Title = "FDC3 WPF Example Component";
                IntentToRaise.TextBox.Text = "ViewChart";

                FSBL.ConfigClient.GetValue(new JObject {
                    ["field"] = "finsemble.components"
                }, (routerClient, response) =>
                {
                    if (response.error != null)
                    {
                        return;
                    }

                    var components = (JObject)response.response?["data"];
                    foreach (var property in components?.Properties())
                    {
                        object value = components?[property.Name]?["foreign"]?["components"]?["App Launcher"]?["launchableByUser"];
                        if ((value != null) && bool.Parse(value.ToString()))
                        {
                            //TODO: filter down to only FDC3 enabled components
                            Application.Current.Dispatcher.Invoke(delegate                             //main thread
                            {
                                ComponentSelect.ItemsComboBox.Items.Add(property.Name);
                            });
                        }
                    }
                });

                //restore state if one exists
                InitializeFromStateOrSpawnData();


                if (FSBL.FDC3Client is object)
                {
                    //Context handler
                    ContextHandler contextHandler = (context) =>
                    {
                        FSBL.Logger.Log(new JToken[] { "context received by contextHandler.", context.Value.ToString() });
                        if (context.Type.Equals("fdc3.instrument"))
                        {
                            Application.Current.Dispatcher.Invoke(async delegate                             //main thread
                            {
                                DataToSend.TextBox.Text   = context.Id?["ticker"]?.ToString();
                                DroppedData.Content       = context.Id?["ticker"]?.ToString();
                                DroppedDataSource.Content = "context shared via FDC3";
                                await SaveStateAsync();
                            });
                        }
                    };
                    FSBL.FDC3Client.DesktopAgentClient.AddContextListener(contextHandler);
                    //To add a filtered context listener
                    //FSBL.FDC3Client.DesktopAgentClient.AddContextListener("fdc3.instrument", contextHandler);

                    //Intent handler
                    ContextHandler intentHandler = (context) =>
                    {
                        FSBL.Logger.Log(new JToken[] { "context received by intentHandler.", context.Value.ToString() });
                        if (context.Type != null && context.Type.Equals("fdc3.instrument"))
                        {
                            Application.Current.Dispatcher.Invoke(async delegate                             //main thread
                            {
                                string ticker = context.Id?["ticker"]?.ToString();
                                FSBL.Logger.Log(new JToken[] { "updating state to ticker:" + ticker });
                                DataToSend.TextBox.Text   = ticker;
                                DroppedData.Content       = ticker;
                                DroppedDataSource.Content = "context shared via FDC3 intent";
                                await SaveStateAsync();
                            });
                        }
                        else if (context == null)
                        {
                            FSBL.Logger.Log(new JToken[] { "null context received by intentHandler." });
                        }
                        else
                        {
                            FSBL.Logger.Log(new JToken[] { "unrecognized context type received by intentHandler.", context.ToString() });
                        }
                    };
                    FSBL.FDC3Client.DesktopAgentClient.AddIntentListener("ViewChart", intentHandler);
                }
                else
                {
                    FSBL.Logger.Error(new JToken[] { "FDC3 Client is not enabled" });
                }

                this.Show();
            });



            FSBL.Logger.OnLog        += Logger_OnLog;
            FSBL.Logger.System.OnLog += Logger_OnLog;
            FSBL.Logger.Perf.OnLog   += Logger_OnLog;
        }
Esempio n. 5
0
        private void Finsemble_Connected(object sender, EventArgs e)
        {
            Application.Current.Dispatcher.Invoke(delegate             //main thread
            {
                // Initialize this Window and show it
                InitializeComponent();                 // Initialize after Finsemble is connected
                FinsembleHeader.SetBridge(FSBL);       // The Header Control needs a connected finsemble instance

                //Styling the Finsemble Header

                FinsembleHeader.GetHandlingService().ActiveBackground                   = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().InactiveBackground                 = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().ButtonHoverBackground              = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().InactiveButtonHoverBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().CloseButtonHoverBackground         = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().InactiveCloseButtonHoverBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().DockingButtonDockedBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().TitleForeground  = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));
                FinsembleHeader.GetHandlingService().ButtonForeground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));

                FinsembleHeader.GetHandlingService().ButtonFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 8,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.Normal
                };
                FinsembleHeader.GetHandlingService().TitleFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 12,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.SemiBold
                };

                //Set window title
                FinsembleHeader.GetHandlingService().Title = "WPF Example Component";

                FSBL.DragAndDropClient.SetScrim(Scrim);                 // The Scrim Label Control is used for drag and drop.

                // Receivers for dropped data.
                FSBL.DragAndDropClient.AddReceivers(new List <KeyValuePair <string, EventHandler <FinsembleEventArgs> > >()
                {
                    new KeyValuePair <string, EventHandler <FinsembleEventArgs> >("symbol", (s, args) =>
                    {
                        var data = args.response["data"]?["symbol"];
                        if (data != null)
                        {
                            //Check if we received an object (so data.symbol.symbol) or a string (data.symbol) to support variations in the format
                            if (data.HasValues)
                            {
                                data = data?["symbol"];
                            }
                            Application.Current.Dispatcher.Invoke((Action) delegate                            //main thread
                            {
                                Application.Current.Dispatcher.Invoke((Action)async delegate                   //main thread
                                {
                                    DroppedData.Content       = data.ToString();
                                    DataToSend.Text           = data.ToString();
                                    DroppedDataSource.Content = "via Drag and Drop";
                                    await SaveStateAsync();
                                });
                            });
                        }
                    })
                });

                // Emitters for data that can be dragged using the drag icon.
                FSBL.DragAndDropClient.SetEmitters(new List <KeyValuePair <string, DragAndDropClient.emitter> >()
                {
                    new KeyValuePair <string, DragAndDropClient.emitter>("symbol", () =>
                    {
                        //set state on drag so correct symbol is displayed
                        Application.Current.Dispatcher.Invoke(async delegate                         //main thread
                        {
                            DroppedData.Content = DataToSend.Text;
                            await SaveStateAsync();
                        });
                        return(new JObject
                        {
                            ["symbol"] = DataToSend.Text,
                            ["description"] = "Symbol " + DataToSend.Text
                        });
                    })
                });

                //Subscribe to a PubSub topic
                //N.B. You must add a PubSub responder before publishing or subscribing to any topic that doesn't start with 'Finsemble'
                //     This is not currently supported in the .Net RouterClient implementation and will need to done in a Finsemble HTML5 service
                Subscribe_to_pubsub();

                FSBL.ConfigClient.GetValue(new JObject {
                    ["field"] = "finsemble.components"
                }, (routerClient, response) =>
                {
                    if (response.error != null)
                    {
                        return;
                    }

                    var components = (JObject)response.response?["data"];
                    foreach (var property in components?.Properties())
                    {
                        object value = components?[property.Name]?["foreign"]?["components"]?["App Launcher"]?["launchableByUser"];
                        if ((value != null) && bool.Parse(value.ToString()))
                        {
                            Application.Current.Dispatcher.Invoke(delegate                             //main thread
                            {
                                ComponentSelect.Items.Add(property.Name);
                            });
                        }
                    }
                });

                //FSBL.LinkerClient.LinkToChannel("group2", null, (s, a) => { });
                //restore state if one exists
                UpdateDisplayData();
                this.Show();
            });

            if (FSBL.FDC3Client is object)
            {
                //FDC3 Usage example
                Application.Current.Dispatcher.Invoke(delegate                 //main thread
                {
                    FDC3Label.Visibility = Visibility.Visible;
                });

                //Context handler
                EventHandler <JObject> contextHandler = (s, context) =>
                {
                    FSBL.Logger.Log(new JToken[] { "WPF FDC3 Usage Example, context received by contextHandler.", context });
                    if (context["type"].ToString().Equals("fdc3.instrument"))
                    {
                        Application.Current.Dispatcher.Invoke(async delegate                         //main thread
                        {
                            DataToSend.Text           = context?["id"]?["ticker"]?.ToString();
                            DroppedData.Content       = context?["id"]?["ticker"]?.ToString();
                            DroppedDataSource.Content = "context shared via FDC3";
                            await SaveStateAsync();
                        });
                    }
                };
                FSBL.FDC3Client.fdc3.addContextListener(contextHandler);
                //FSBL.FDC3Client.fdc3.addContextListener("fdc3.instrument", contextHandler);


                EventHandler <JObject> intentHandler = (s, context) =>
                {
                    FSBL.Logger.Log(new JToken[] { "WPF FDC3 Usage Example: context received by intentHandler.", context });
                    if (context["type"].ToString().Equals("fdc3.instrument"))
                    {
                        Application.Current.Dispatcher.Invoke(async delegate                         //main thread
                        {
                            DataToSend.Text           = context?["id"]?["ticker"]?.ToString();
                            DroppedData.Content       = context?["id"]?["ticker"]?.ToString();
                            DroppedDataSource.Content = "context shared via FDC3 intent";
                            await SaveStateAsync();
                        });
                    }
                };
                FSBL.FDC3Client.fdc3.addIntentListener("ViewChart", intentHandler);
            }
            else
            {
                //Use Default linker
                //Subscribe to Finsemble Linker Channels
                FSBL.LinkerClient.Subscribe("symbol", (error, response) =>
                {
                    Application.Current.Dispatcher.Invoke(async delegate                     //main thread
                    {
                        DataToSend.Text           = response.response?["data"]?.ToString();
                        DroppedData.Content       = response.response?["data"]?.ToString();
                        DroppedDataSource.Content = "via Linker";
                        await SaveStateAsync();
                    });
                });
            }

            // Logging to the Finsemble Central Console

            /*
             * FSBL.Logger.Error(new JToken[] {"Error Test"});
             *
             * FSBL.Logger.Log(new JToken[] {"Log Test"});
             *
             * FSBL.Logger.Debug(new JToken[] {"Debug Test"});
             *
             * FSBL.Logger.Info(new JToken[] {"Info Test"});
             *
             * FSBL.Logger.Verbose(new JToken[] {"Verbose Test"});
             */

            ////Sample code to execute LauncherClient.getActiveDescriptors()
            //FSBL.LauncherClient.getActiveDescriptors((s, args) =>
            //{
            //	System.Diagnostics.Debug.Write(args.response.ToString());
            //});
        }
Esempio n. 6
0
        private void Finsemble_Connected(object sender, EventArgs e)
        {
            Application.Current.Dispatcher.Invoke(async delegate             //main thread
            {
                // Initialize after Finsemble is connected
                InitializeComponent();

                // The Header Control needs a connected finsemble instance
                FinsembleHeader.SetBridge(FSBL);

                #region Styling the Finsemble Header

                FinsembleHeader.GetHandlingService().ActiveBackground                   = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().InactiveBackground                 = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#22262F"));
                FinsembleHeader.GetHandlingService().ButtonHoverBackground              = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().InactiveButtonHoverBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().CloseButtonHoverBackground         = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().InactiveCloseButtonHoverBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F26666"));
                FinsembleHeader.GetHandlingService().DockingButtonDockedBackground      = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#0A8CF4"));
                FinsembleHeader.GetHandlingService().TitleForeground  = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));
                FinsembleHeader.GetHandlingService().ButtonForeground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ACB2C0"));
                FinsembleHeader.GetHandlingService().ButtonFont       = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 8,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.Normal
                };
                FinsembleHeader.GetHandlingService().TitleFont = new TitlebarFontConfiguration()
                {
                    FontFamily = null,
                    FontSize   = 12,
                    FontStyle  = FontStyles.Normal,
                    FontWeight = FontWeights.SemiBold
                };

                //Set window title
                FinsembleHeader.GetHandlingService().Title = "WPF Example Core Component";

                #endregion

                #region Drag And Drop
                FSBL.Clients.DragAndDropClient.SetScrim(Scrim);                 // The Scrim Label Control is used for drag and drop.

                // Receivers for dropped data.
                FSBL.Clients.DragAndDropClient.AddReceivers(new List <KeyValuePair <string, EventHandler <FinsembleEventArgs> > >()
                {
                    new KeyValuePair <string, EventHandler <FinsembleEventArgs> >("symbol", (s, args) =>
                    {
                        var data = args.response["data"]?["symbol"];
                        if (data != null)
                        {
                            //Check if we received an object (so data.symbol.symbol) or a string (data.symbol) to support variations in the format
                            if (data.HasValues)
                            {
                                data = data?["symbol"];
                            }
                            Application.Current.Dispatcher.Invoke((Action) delegate                            //main thread
                            {
                                Application.Current.Dispatcher.Invoke((Action)async delegate                   //main thread
                                {
                                    DroppedData.Content       = data.ToString();
                                    DataToSend.TextBox.Text   = data.ToString();
                                    DroppedDataSource.Content = "via Drag and Drop";
                                    await SaveStateAsync();
                                });
                            });
                        }
                    })
                });

                // Emitters for data that can be dragged using the drag icon.
                FSBL.Clients.DragAndDropClient.SetEmitters(new List <KeyValuePair <string, DragAndDropClient.emitter> >()
                {
                    new KeyValuePair <string, DragAndDropClient.emitter>("symbol", () =>
                    {
                        //set state on drag so correct symbol is displayed
                        Application.Current.Dispatcher.Invoke(async delegate                 //main thread
                        {
                            DroppedData.Content = DataToSend.TextBox.Text;
                            await SaveStateAsync();
                        });
                        return(new JObject
                        {
                            ["symbol"] = DataToSend.TextBox.Text,
                            ["description"] = "Symbol " + DataToSend.TextBox.Text
                        });
                    })
                });
                #endregion

                //Subscribe to a PubSub topic
                //N.B. You must add a PubSub responder before publishing or subscribing to any topic that doesn't start with 'Finsemble'
                //     This is not currently supported in the .Net RouterClient implementation and will need to done in a Finsemble HTML5 service
                SubscribeToPubSub();

                SetUpFinsembleComponents();
                await UpdateDisplayData();
                this.Show();
            });

            #region communication through channels
            if (FSBL.Clients.Fdc3Client is object)
            {
                FDC3Label.Visibility = Visibility.Visible;
                ContextHandler contextHandler = (context) =>
                {
                    FSBL.Clients.Logger.Log(new JToken[] { "WPF Core FDC3 Usage Example, context received by contextHandler.", context.Value });
                    if (context.Type.Equals("fdc3.instrument"))
                    {
                        Application.Current.Dispatcher.Invoke(async delegate                         //main thread
                        {
                            DataToSend.TextBox.Text   = context.Id?["ticker"]?.ToString();
                            DroppedData.Content       = context.Id?["ticker"]?.ToString();
                            DroppedDataSource.Content = "context shared via FDC3";
                            await SaveStateAsync();
                        });
                    }
                };
                FSBL.Clients.Fdc3Client.DesktopAgentClient.AddContextListener("fdc3.instrument", contextHandler);

                ContextHandler intentHandler = (context) =>
                {
                    FSBL.Clients.Logger.Log(new JToken[] { "WPF Core FDC3 Usage Example: context received by intentHandler.", context.Value });
                    if (context.Type != null && context.Type.Equals("fdc3.instrument"))
                    {
                        Application.Current.Dispatcher.Invoke(async delegate                         //main thread
                        {
                            DataToSend.TextBox.Text   = context.Id?["ticker"]?.ToString();
                            DroppedData.Content       = context.Id?["ticker"]?.ToString();
                            DroppedDataSource.Content = "context shared via FDC3 intent";
                            await SaveStateAsync();
                        });
                    }
                };
                FSBL.Clients.Fdc3Client.DesktopAgentClient.AddIntentListener("ViewChart", intentHandler);
            }
            else
            {
                //Use Default linker
                //Subscribe to Finsemble Linker Channels
                FSBL.Clients.LinkerClient?.Subscribe("symbol", (error, response) =>
                {
                    Application.Current.Dispatcher.Invoke(async delegate                     //main thread
                    {
                        DataToSend.TextBox.Text   = response.response?["data"]?.ToString();
                        DroppedData.Content       = response.response?["data"]?.ToString();
                        DroppedDataSource.Content = "via Linker";
                        await SaveStateAsync();
                    });
                });
            }
            #endregion

            #region Logging
            FSBL.Clients.Logger.OnLog        += Logger_OnLog;
            FSBL.Clients.Logger.System.OnLog += Logger_OnLog;
            FSBL.Clients.Logger.Perf.OnLog   += Logger_OnLog;

            // Example: Logging to the Finsemble Central Console

            /*
             * FSBL.Logger.Error(new JToken[] {"Error Test"});
             *
             * FSBL.Logger.Log(new JToken[] {"Log Test"});
             *
             * FSBL.Logger.Debug(new JToken[] {"Debug Test"});
             *
             * FSBL.Logger.Info(new JToken[] {"Info Test"});
             *
             * FSBL.Logger.Verbose(new JToken[] {"Verbose Test"});
             */
            #endregion
        }