private async void WatcherOnPortsChanged(object sender, OnPortsChangedEventArgs e) { if (e.NewItem.Count > 0 && e.NewItem != null) { if (e.NewItem.Count == 1) { LogList.Insert(0, e.NewItem.Count + " New Device Detected..."); } else { LogList.Insert(0, e.NewItem.Count + " New Devices Detected..."); } await Task.Run(() => ReadDeviceList(e.NewItem)); //await Task.WhenAll(_watcher.ComPorts.Select(async item => await AddNewGsmComm(item)).ToList()); } if (e.RemovedItem.Count > 0 && e.RemovedItem != null) { foreach (var item in e.RemovedItem) { try { foreach (var gsm in GsmList.Where(gsm => gsm.Model.PortName == item)) { GsmList.Remove(gsm); LogList.Insert(0, "Removing Device " + gsm.Model.PortName); } } catch (Exception) { } } } }
private async Task MessageReceiveAsync(object sender, MessageReceivedEventArgs e) { using (await _messageReceivedLock.LockAsync()) { var gsm = GsmList.FirstOrDefault(c => c.Model == (GsmCommMain)sender); var obj = e.IndicationObject; var loc = (MemoryLocation)obj; if (gsm == null) { return; } var messages = await Task.Run(() => gsm.GetMessagesAsync(PhoneMessageStatus.ReceivedUnread, loc.Storage)); foreach (var message in messages) { if (MessageList.Contains(message)) { return; } MessageList.Insert(0, message); EnqueueMessage(message); } } }
private async Task RefreshDeviceProcAsync() { _watcher.Dispose(); await Task.Run(() => CloseDeviceList(GsmList)); GsmList.Clear(); //DeviceLoading = // NotifyTaskCompletion.Create( // Task.WhenAll(_watcher.ComPorts.Select(async item => await AddNewGsmComm(item)).ToList())); await Task.Run(() => ReadDeviceList(_watcher.ComPorts)); }
private async Task AddNewGsmComm(string item) { for (var i = 0; i < 5; i++) { var port = new SerialPort(item); var gsm = new GsmCommModel(new GsmCommMain(port.PortName, port.BaudRate, 1000)); await Task.Run(() => gsm.CloseAsync()); if (!await Task.Run(() => gsm.IsOpenAsync())) { await Task.Run(() => gsm.OpenAsync()); } //if (!await Task.Run(() => gsm.IsConnectedAsync()) || !await Task.Run(() => gsm.IsOpenAsync())) // return; //if (!await Task.Run(() => gsm.UsableDeviceTest())) // return; gsm.Model.MessageReceived += comm_MessageReceived; gsm.InitializeGsm(); //_addNumberWindow.Show(); GsmList.Add(gsm); LogList.Add(gsm.Model.PortName + " Device is added..."); try { var messages = await Task.Run(() => gsm.GetUnsavedMessages()); foreach (var message in messages) { MessageList.Insert(0, message); EnqueueMessage(message); } } catch (Exception) { // ignored } await gsm.EnableMessageNotificationAsync(); break; } }
static GSMTest() { GsmList.Add( new GSM("NokiaX1", "Nokia", 2323M, "Pesho", new Battery("A", 66, 66, BatteryType.Li_Ion), new Display(12, 22222) )); GsmList.Add( new GSM("LenovoA2", "Lenovo", 2323M, "Ivan", new Battery("A", 100, 66, BatteryType.NiCd), new Display(5, 5) )); GsmList.Add( new GSM("S3", "Sanyo", 2323M, "Maria", new Battery("A", 66, 66, BatteryType.NuMH), new Display(25, 3333333) )); }
private async Task DeleteMessage(MessageViewModel message) { var gsm = GsmList.FirstOrDefault(c => c.Model.PortName == message.Port); if (gsm == null) { return; } while (true) { try { await Task.Run(() => gsm.DeleteMessageAsync(message)); break; } catch (CommException e) { await Task.Delay(1000); } } }
private async Task ProcessMessage(MessageViewModel message) { await Task.Delay(1000); var messageType = MessageDecoder(message); if (messageType == MessageType.None) { LogList.Insert(0, "Garbage Message: " + message.MessageData.UserDataText); } if (messageType == MessageType.WeatherData) { //(013226007252592,2017/03/06,00:14:59,25.0,89.0,993.4,0.05,0.00,270,0.88, 0.00, 0.00,-52,11.57) //(IMEI,DATE,TIME,TEMP,HUM,PRES,RAIN24H,RAIN15M,WDIR,WSPEED15,IRRMIN,IRRHR,SIGNAL,BATTERY) var fields = message.MessageData.UserDataText.Split(','); for (var i = 0; i < fields.Length; i++) { fields[i] = fields[i].Trim('(', ')'); } var list = fields.ToList(); try { var station = await Task.Run(() => _repository.Stations.GetAsync(c => c.Imei == list.FirstOrDefault())); if (station == null) { LogList.Insert(0, "Imei was not recognized for message:" + message.MessageData.UserDataText); return; } var dt = DateTime.ParseExact(list.ElementAt(1) + " " + list.ElementAt(2), "yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture); var records = await Task.Run( () => _repository.Measurements.GetRangeAsync( c => c.StationId == station.StationId && c.Date == dt)); if (records.Count == 0) { LogList.Insert(0, "Data is already existing in the system for message:" + message.MessageData.UserDataText); return; } await Task.Run(() => _repository.Measurements.AddAsync(new Measurement { StationId = station.StationId, Date = dt, Temperature = DecimalChecker(list.ElementAt(3)), Humidity = DecimalChecker(list.ElementAt(4)), Pressure = DecimalChecker(list.ElementAt(5)), Rainfall24H = DecimalChecker(list.ElementAt(6)), Rainfall15M = DecimalChecker(list.ElementAt(7)), WindDirection = DecimalChecker(list.ElementAt(8)), WindSpeed = DecimalChecker(list.ElementAt(9)), SolarIrradianceM = DecimalChecker(list.ElementAt(10)), SolarIrradianceH = DecimalChecker(list.ElementAt(11)), SignalLevel = DecimalChecker(list.ElementAt(12)), Battery = DecimalChecker(list.ElementAt(13)) })); LogList.Insert(0, "Succefully Added Data: " + message.MessageData.UserDataText); } catch (Exception) { LogList.Insert(0, "Unsuccessful data addition. Format is not acceptable for message: " + message.MessageData.UserDataText); } } if (messageType == MessageType.WeatherRequest) { var keyword = new List <string>(message.MessageData.UserDataText.Split(' ')).LastOrDefault(); try { var station = await Task.Run(() => _repository.Stations.GetAsync(c => c.Keyword == keyword)); if (station == null) { LogList.Insert(0, "Keyword does not exist: " + message.MessageData.UserDataText); return; } var measurements = await Task.Run(() => _repository.Measurements.GetRangeAsync(c => c.StationId == station.StationId)); if (measurements.Count == 0) { LogList.Insert(0, "There still no data available in this station: " + message.MessageData.UserDataText); return; } var measurement = measurements.OrderByDescending(c => c.Date).FirstOrDefault(); var gsm = GsmList.FirstOrDefault(c => c.Model.PortName == message.Port); var sms = "As of " + measurement.Date.ToString("yy-mm-dd") + " Temperature: " + measurement.Temperature + "°C, Humidity: " + measurement.Humidity + "%, Wind: " + measurement.WindDirection + "° " + measurement.WindSpeed + "m/s, Rainfall: " + measurement.Rainfall15M + "mm, Pressure" + measurement.Pressure + " hPa, Solar Irradiance: " + measurement.SolarIrradianceM; if (gsm != null) { await Task.Run( () => gsm.SendMessageASync(sms, message.PhoneNumber, false, false, 1)); LogList.Insert(0, "Request succesfull: " + message.MessageData); } } catch (Exception) { } } message.IsProcessed = true; await DeleteMessage(message); }