protected virtual void OnDataReceived(QMessageEvent e) { if (DataReceived != null) { DataReceived(this, e); } }
//-------------------------------------------------------------------// /// <summary> /// Event triggered by the q process sending data /// </summary> /// <param name="sender">QConnection object delivering the data</param> /// <param name="args">data</param> private static void OnUpdate(object sender, QMessageEvent args) { var alias = GetAliasForConnection(sender as QConnection); { if (args == null || args.Message.Data == null) return; var array = args.Message.Data as Array; if (array != null) { var a = array; if (a.Length != 3) return; if (!(a.GetValue(2) is QTable)) return; try { var tab = a.GetValue(1).ToString(); var data = a.GetValue(2) as QTable; lock (LockThis) { //this lock is mandatory here, since we need to preserve order filling topics. UpdateCache(alias, tab, data); } } // ReSharper disable EmptyGeneralCatchClause catch (Exception) // ReSharper restore EmptyGeneralCatchClause { // Console.WriteLine(e.Message); } } else { if (args.Message.Data.GetType().ToString() == "qSharp.QConnectionException" && ((QConnectionException) args.Message.Data).Message.Equals("Cannot read data from stream")) { //connections[alias].connectionCell.Formula = CloseConnectionRTD(alias); RtdClose(alias); } } } }