예제 #1
0
 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);
 }
예제 #2
0
 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);
 }
예제 #3
0
 public static void Add(DataCapture.Data item)
 {
     if (DataAdded != null)
     {
         CapturedData.Push <DataCapture.Data>(item);
         DataAdded.Invoke(null, EventArgs.Empty);
     }
 }
예제 #4
0
        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);
        }
예제 #5
0
        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");
        }
예제 #6
0
        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);
            }
        }
예제 #7
0
        //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);
            }
        }
예제 #8
0
        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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        /// <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);
        }
예제 #12
0
        //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);
        }
예제 #13
0
        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);
        }
예제 #14
0
 public void CallDataAdded(AddDataEventArgs e)
 {
     DataAdded?.Invoke(this, e);
 }
예제 #15
0
 static private void OnChanged(object sender, FileSystemEventArgs e)
 {
     DataAdded?.Invoke(null, EventArgs.Empty);
 }
예제 #16
0
 protected void OnDataAdded(IProfilingData data) => DataAdded?.Invoke(data);
예제 #17
0
파일: DbMoq.cs 프로젝트: PForever/RaspbIoT
 public void DataAddedInvok(object sender, Telemetry telemetry) => DataAdded?.Invoke(sender, telemetry);
예제 #18
0
파일: ByteBuffer.cs 프로젝트: umby24/ZBase
 public void Purge()
 {
     DataAdded?.Invoke();
 }