public void Add(long t, double p, double v) { Time.Add(t); Price.Add(p); Volume.Add(v); DataAdded?.Invoke(this, Symbol, t, p, v); }
public AnotherDataStore(IAddData addData, IGetData getData) { this.addData = addData; this.addData.DataAdded += (s, e) => DataAdded?.Invoke(s, e); this.getData = getData; this.getData.DataRetrieved += (s, e) => DataRetrieved?.Invoke(s, e); }
public static void Add(DataCapture.Data item) { if (DataAdded != null) { CapturedData.Push <DataCapture.Data>(item); DataAdded.Invoke(null, EventArgs.Empty); } }
private async void SubmitMessage(string obj) { if (Connectivity.NetworkAccess != NetworkAccess.Internet) { NoInternetAlert(); return; } if (manager == null || TextEntry.Length == 0) { return; } if (chat == null) { view.notify("no session error"); } var x = new TextChatViewModel() { Direction = TextChatViewModel.ChatDirection.Outgoing, Text = obj }; int sendResult = await manager.sendMessage(chat.SessionID, new Message(true, TextEntry, "", 0)); switch (sendResult) { case -200: //Http request returned code different from "200 OK" if (failedMessages > 4) { view.notify("message error", "Internal server error"); //Too many failed attempts return; } failedMessages++; SubmitMessage(obj); return; case -12: //unsuccessful tryParse in the manager. if (failedMessages > 4) { view.notify("message error", "Server responded with an error message."); //Too many failed attempts. return; } failedMessages++; SubmitMessage(obj); return; } if (failedMessages > 0) { failedMessages = 0; //Message was sent successfully. } chat.AddMessage(new Message(true, TextEntry, "", 0)); Messages.Add(x); TextEntry = string.Empty; view.notify("new messages"); DataAdded?.Invoke(this, null); }
private void SubmitMessage(string obj) { var x = new TextChatViewModel() { Direction = TextChatViewModel.ChatDirection.Outgoing, Text = obj }; Messages.Add(x); TextEntry = string.Empty; DataAdded?.Invoke(this, null); //MessagingCenter.Send<MainViewModel>(this, "EntryAdded"); }
private async void getLatestMessages() { if (Connectivity.NetworkAccess != NetworkAccess.Internet) { NoInternetAlert(); return; } if (chat == null || manager == null) { return; } string jsonList = await manager.GetCustMessages(chat.SessionID, lastMessageID); if (jsonList.Contains("Error")) { if (failedRequests > 5) { if (jsonList.Substring(6).Contains("Unable to resolve host")) { view.notify("error host"); } else { view.notify("error", jsonList.Substring(6) + Environment.NewLine + $" The messaging service has been disabled after {failedRequests} failed requests."); } failedRequests = 0; } failedRequests++; //StopUpdateRequests(); return; } List <Message> newMesssages = JsonConvert.DeserializeObject <List <Message> >(jsonList); if (newMesssages.Count > 0) { lastMessageID = newMesssages[newMesssages.Count - 1].Id; foreach (Message m in newMesssages) { Messages.Add(new TextChatViewModel() { Text = m.Text, Direction = TextChatViewModel.ChatDirection.Incoming }); chat.AddMessage(m); } view.notify("new messages"); DataAdded?.Invoke(this, null); } }
//Gets the messages sent after the latest received message. private async void GetLatestMessages() { if (Connectivity.NetworkAccess != NetworkAccess.Internet) { NoInternetAlert(); return; } string jsonMessageList = await manager.GetEmpMessages(chat.SessionID, lastMessageID); //Get the employee messages in a json list. //Check if the response contains error. if (jsonMessageList.Contains("Error")) { if (failedRequests > 5) //If too many errors have occured { if (jsonMessageList.Substring(6).Contains("Unable to resolve host")) { view.notify("error host"); //Can't reach host exception } else { view.notify("error", jsonMessageList.Substring(6) + Environment.NewLine + $" The messaging service has encountered {failedRequests} failed requests."); } failedRequests = 0; } failedRequests++; return; } //If no errors have occured - convert the json message list from a string to list. List <Message> newMesssages = JsonConvert.DeserializeObject <List <Message> >(jsonMessageList); if (newMesssages.Count > 0) //Check if the list isn't empty { lastMessageID = newMesssages[newMesssages.Count - 1].Id; foreach (Message m in newMesssages) //Add the messages in the chat list. { Messages.Add(new TextChatViewModel() { Text = m.Text, Direction = TextChatViewModel.ChatDirection.Incoming }); chat.AddMessage(m); } view.notify("new messages"); //Notify the view for new messages in order to scroll to the last message. DataAdded?.Invoke(this, null); } }
public void AddData(Telemetry telemetry) { Logger.Debug( $"Db Manager AddData Invoked for telemetry (code: {telemetry.DeviceCode}, values {telemetry.Values}, timeMark {telemetry.TimeMarker})"); foreach (KeyValuePair <string, string> propertiesValue in telemetry.Values) { //TODO не забуть сверять корректность времени устройств с сервером //TODO реализовать добавление списком на уровне базы DbWriter.AddTelemetry(telemetry.DeviceCode, propertiesValue.Key, telemetry.TimeMarker.TimeFormater(), propertiesValue.Value); } DataAdded?.Invoke(this, telemetry); }
bool ReceiveMessage() { var lastMessage = Messages.LastOrDefault(); if (lastMessage != null && lastMessage.Direction != TextChatViewModel.ChatDirection.Incoming) { Messages.Add(new TextChatViewModel() { Direction = TextChatViewModel.ChatDirection.Incoming, Text = $"You said {lastMessage.Text}" }); //MessagingCenter.Send<MainViewModel>(this, "EntryAdded"); DataAdded?.Invoke(this, null); } return(true); }
/// <summary> /// Adds data to the backing buffer. /// </summary> /// <param name="data"></param> public void AddBytes(byte[] data) { lock (_opLocker) { if (_buffer.Length == 0) { _buffer = data; DataAdded?.Invoke(); return; } int tempLength = _buffer.Length + data.Length; var tempBuff = new byte[tempLength]; Buffer.BlockCopy(_buffer, 0, tempBuff, 0, _buffer.Length); Buffer.BlockCopy(data, 0, tempBuff, _buffer.Length, data.Length); _buffer = tempBuff; DataAdded?.Invoke(); } }
/// <summary> /// Process data /// </summary> /// <param name="data">Data to process</param> public void Process(TableMonitorData data) { if (data == null) { throw new ArgumentNullException(nameof(data)); } // primary keys var primaryKeyNames = new List <string>(); var columns = new List <string>(); if (string.IsNullOrWhiteSpace(data.ConnectionStringName)) { data.ConnectionStringName = "default"; } sqlService.OpenConnection((connection) => { primaryKeyNames = connection.Query <string>("SELECT cname FROM sys.syscolumns WHERE in_primary_key = 'Y' AND tname = :tableName ORDER BY cname", new { tableName = data.TableName }).ToList(); if (!string.IsNullOrWhiteSpace(data.PrimaryKeys)) { primaryKeyNames.AddRange(data.PrimaryKeys.Split(new[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim())); } // Assert primary columns if (!primaryKeyNames.Any()) { throw new Exception($"The table {data.TableName} has no primary columns."); } columns = connection.Query <string>("SELECT cname FROM sys.syscolumns WHERE tname = :tableName ORDER BY cname", new { tableName = data.TableName }).ToList(); foreach (var nonePrimaryKey in primaryKeyNames) { Console.WriteLine($"Primary key: {nonePrimaryKey}"); } var statement = $"SELECT string({string.Join(",", WrapInQuotes(primaryKeyNames))}) as primary_key_column, {string.Join(",", WrapInQuotes(columns))} FROM {data.TableName} ORDER BY {string.Join(",", WrapInQuotes(primaryKeyNames))}"; int counter = 0; try { var enumerator = connection.Query(statement); Console.WriteLine($"TableMonitor statement: {statement}"); foreach (var dapperRow in enumerator.Select(x => (IDictionary <string, object>)x)) { counter++; if (counter % 100 == 0) { Console.WriteLine($"Processed {data.TableName} data: {counter}"); } // Get and remove pk var primaryKey = dapperRow["primary_key_column"]?.ToString(); dapperRow.Remove("primary_key_column"); // Generate hash var hash = GenerateHash(dapperRow); // Find row in existing data var existingData = data.Row.FirstOrDefault(x => x.PrimaryKey == primaryKey); // Data not found if (existingData == null) { // Filter primary keys var rowCopy = new Dictionary <string, object>(dapperRow); var row = dapperRow.Where(x => primaryKeyNames.Any(y => y.ToLower() == x.Key.ToLower())).ToDictionary(y => y.Key, v => v.Value); existingData = new TableMonitorDataRow { Hash = hash, Updated = true, PrimaryKey = primaryKey, // Set row containting only pks Row = row }; // Invoke event. All columns must be included here DataAdded?.Invoke(this, new AffectedRowEventArgs { TableName = data.TableName, Row = rowCopy }); // Add data data.Row.Add(existingData); } // Data changed else if (hash != existingData.Hash) { // Filter primary keys var rowCopy = new Dictionary <string, object>(dapperRow); existingData.Hash = hash; existingData.Updated = true; // Invoke event. All columns must be included here DataChanged?.Invoke(this, new AffectedRowEventArgs { TableName = data.TableName, Row = rowCopy }); } else { existingData.Updated = true; } } Console.WriteLine($"Processed {data.TableName} data: {counter}"); // Create copy of rows foreach (var removedData in data.Row.Where(x => !x.Updated)) { counter++; if (counter % 100 == 0) { Console.WriteLine($"Processed {data.TableName} data: {counter}"); } // Invoke remove event DataRemoved?.Invoke(this, new AffectedRowEventArgs { TableName = data.TableName, Row = removedData.Row }); } Console.WriteLine($"Processed {data.TableName} data: {counter}"); // Just add updated rows data.Row = data.Row.Where(x => x.Updated).ToList(); } catch (Exception ex) { var message = $"Could not process data. Query-Statement: {statement}.\r\nFailed row: {counter}.\r\nPrimary keys: {string.Join(",", primaryKeyNames)}.\r\nColumns: {string.Join(",", columns)}"; LogManagerInstance.Instance.Error($"Error in TableMonitorService.Process\r\n{message}"); throw new Exception(message, ex); } }, data.ConnectionStringName); }
//Submits a message in the chat private async void SubmitMessage(string messageText) { if (Connectivity.NetworkAccess != NetworkAccess.Internet) { NoInternetAlert(); return; } if (manager == null || TextEntry.Length == 0) { return; } if (chat == null) { view.notify("session error"); return; } if (sessionClosed) { view.notify("session closed"); return; } var messageBubble = new TextChatViewModel() { Direction = TextChatViewModel.ChatDirection.Outgoing, Text = messageText }; int sendResult = await manager.sendMessage(chat.SessionID, new Message(false, TextEntry, "", 0)); switch (sendResult) { case -200: //Http request returned code different from "200 OK" if (failedMessages > 4) { view.notify("message error", "Internal server error"); //Too many failed attempts return; } failedMessages++; SubmitMessage(messageText); //make another attempt to send the message. return; case -12: //unsuccessful tryParse in the manager. if (failedMessages > 4) { view.notify("message error", "Server responded with an error message."); //Too many failed attempts. return; } failedMessages++; SubmitMessage(messageText); //Make another attempt to send the message. return; case -2: //Session closed sessionClosed = true; view.notify("session closed"); break; } if (failedMessages > 0) { failedMessages = 0; //Message was sent successfully. } chat.AddMessage(new Message(false, TextEntry, "", 0)); Messages.Add(messageBubble); //Add the message blob to the list TextEntry = string.Empty; //Empty the entry field view.notify("new messages"); //notify the view to scroll down DataAdded?.Invoke(this, null); }
public void Add(List <DataType> dataPoints, DateTime?startDate = null, DateTime?endDate = null) { if (dataPoints == null) { Debug.WriteLine("MarketSeriesBase Add - NULL dataPoints - FIXME !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); return; } var lastDataEndDate = this[LastIndex].Time; // TODO: Fill range from startDate to endDate with "NoData" and if a range is loaded that creates a gap with existing ranges, fill that with "MissingData" //if (bars.Count == 0) return; var resultsStartDate = dataPoints.Count == 0 ? default(DateTime) : dataPoints[0].Time; var resultsEndDate = dataPoints.Count == 0 ? default(DateTime) : dataPoints[dataPoints.Count - 1].Time; if (!startDate.HasValue) { startDate = resultsStartDate; Debug.WriteLine("WARN -!startDate.HasValue in MarketSeries.Add"); } if (!endDate.HasValue) { endDate = resultsEndDate; Debug.WriteLine("WARN -!endDate.HasValue in MarketSeries.Add"); } #if DEBUG_BARSCOPIED int dataPointsCopied = 0; #endif if (this.Count == 0 && DataEndDate == default(DateTime) && DataStartDate == default(DateTime)) { foreach (var b in dataPoints) { Add(b); //Add(b.Time,b.Open,b.High,b.Low,b.Close,b.Volume); //this.openTime.Add(b.Time); //this.open.Add(b.Open); //this.high.Add(b.High); //this.low.Add(b.Low); //this.close.Add(b.Close); //this.tickVolume.Add(b.Volume); } } else { if (startDate <= DataStartDate) // prepending data { int lastIndexToCopy; for (lastIndexToCopy = dataPoints.Count - 1; lastIndexToCopy >= 0 && dataPoints[lastIndexToCopy].Time >= DataStartDate; lastIndexToCopy--) { ; // OPTIMIZE? } for (int dataIndex = OpenTime.Count == 0 ? 0 : OpenTime.FirstIndex - 1; lastIndexToCopy >= 0; dataIndex--, lastIndexToCopy--) { //var bar = bars[lastIndexToCopy] as TimedBar; //if (bar == null) //{ // bar = new TimedBar(bars[lastIndexToCopy]); //} this[dataIndex] = dataPoints[lastIndexToCopy]; #if DEBUG_BARSCOPIED dataPointsCopied++; #endif } if (DataStartDate != default(DateTime) && endDate.Value + TimeFrame.TimeSpan < DataStartDate) { Debug.WriteLine($"[DATA GAP] endDate: {endDate.Value}, DataStartDate: {DataStartDate}"); throw new NotImplementedException("TODO REVIEW this gap length"); //AddGap(endDate.Value + TimeFrame.TimeSpan, DataStartDate - TimeSpanApproximation.TimeSpan); } } // Both above and below may get run if (endDate >= DataEndDate) // append data { int lastIndexToCopy; for (lastIndexToCopy = 0; lastIndexToCopy < dataPoints.Count && dataPoints[lastIndexToCopy].Time <= DataEndDate; lastIndexToCopy++) { ; // OPTIMIZE? } for (int dataIndex = OpenTime.LastIndex + 1; lastIndexToCopy < dataPoints.Count; dataIndex++, lastIndexToCopy++) { //var bar = bars[lastIndexToCopy] as TimedBar; //if (bar == null) //{ // bar = new TimedBar(bars[lastIndexToCopy]); //} this[dataIndex] = dataPoints[lastIndexToCopy]; #if DEBUG_BARSCOPIED dataPointsCopied++; #endif } if (DataEndDate != default(DateTime) && startDate.Value - TimeFrame.TimeSpan > DataEndDate) { Debug.WriteLine($"[DATA GAP] startDate: {startDate.Value}, DataEndDate: {DataEndDate}"); throw new NotImplementedException("TODO REVIEW this gap length"); //AddGap(DataEndDate + TimeFrame.TimeSpan, startDate.Value - TimeSpanApproximation.TimeSpan); } } } var oldEnd = DataEndDate; var oldStart = DataStartDate; if (DataEndDate == default(DateTime) || startDate.Value - TimeFrame.TimeSpan <= DataEndDate && endDate.Value > DataEndDate) { DataEndDate = endDate.Value; } if (DataStartDate == default(DateTime) || endDate.Value + TimeFrame.TimeSpan >= DataStartDate && startDate.Value < DataStartDate) { DataStartDate = startDate.Value; } var addedSpan = this[LastIndex].Time - (lastDataEndDate == default(DateTime) ? this[FirstIndex].Time : lastDataEndDate); if (addedSpan > TimeSpan.Zero) { BackwardForward bf = BackwardForward.None; if (oldEnd != DataEndDate) { bf |= BackwardForward.Forward; } if (oldStart != DataStartDate) { bf |= BackwardForward.Backward; } Debug.WriteLine($"[{this}] ADDED DATA: {addedSpan} {bf} "); DataAdded?.Invoke(bf); } //Debug.WriteLine($"[{this} - new range] {DataStartDate} - {DataEndDate} (last data: {this[LastIndex].Time}) (was {oldStart} - {oldEnd} (last data: {lastDataEndDate}))"); #if DEBUG_BARSCOPIED Debug.WriteLine($"{SymbolCode}-{TimeFrame.Name} Imported {dataPointsCopied} bars"); #endif EraseGap(startDate.Value, endDate.Value); }
public void CallDataAdded(AddDataEventArgs e) { DataAdded?.Invoke(this, e); }
static private void OnChanged(object sender, FileSystemEventArgs e) { DataAdded?.Invoke(null, EventArgs.Empty); }
protected void OnDataAdded(IProfilingData data) => DataAdded?.Invoke(data);
public void DataAddedInvok(object sender, Telemetry telemetry) => DataAdded?.Invoke(sender, telemetry);
public void Purge() { DataAdded?.Invoke(); }