예제 #1
0
        public static async Task ProcessMessage(string message)
        {
            using (var releaser = await myLock.LockAsync())
            {
                try
                {
                    // Construct default (error) JSON.
                    string json = "{\"Command\": \"\", \"Result\": -99}";

                    // Check EMR3 thread is running. If it is
                    // not then wait until it is.
                    while (!Emr3.IsRunning())
                    {
                        await Task.Delay(250);
                    }

                    // Split the message around commas.
                    string[] parts = message.Split(new char[] { ',' });

                    // Check there is at least one part
                    if (parts.Length >= 1)
                    {
                        switch (parts[0])
                        {
                        case "BL":

                            // Bootloader.
                            //SystemUpdate.AccessBootloader();
                            break;

                        case "Gv":

                            // Get Version.
                            await ParentPage.ResetTimer();

                            json = string.Format("{{\"Command\": \"Gv\", \"Result\": 0, \"Version\": {0}.{1}, \"Model\":\"{2}\"}}", MainPage.MajorVersion, MainPage.MinorVersion, MainPage.Model);
                            break;

                        case "Gf":

                            // Get features.
                            json = Emr3.GetFeatures();

                            break;

                        case "Gt":

                            // Get temperature.
                            json = await Emr3.GetTemperature();

                            break;

                        case "Gs":

                            // Get status.
                            json = await Emr3.GetStatus();

                            break;

                        case "Gpl":

                            // Get preset litres.
                            json = await Emr3.GetPreset();

                            break;

                        case "Grl":

                            // Get realtime litres.
                            json = await Emr3.GetRealtime();

                            break;

                        case "Gtc":

                            // Get transaction count
                            json = await Emr3.GetTranCount();

                            break;

                        case "Gtr":

                            // Get transaction record
                            await ParentPage.ResetTimer();

                            if (parts.Length == 2)
                            {
                                json = await Emr3.GetTran(parts[1]);
                            }

                            break;

                        case "Spl":

                            // Set polling.
                            if (parts.Length == 2)
                            {
                                json = Emr3.SetPolling(parts[1]);
                            }

                            break;

                        case "Sp":

                            // Set preset.
                            await ParentPage.ResetTimer();

                            if (parts.Length == 2)
                            {
                                json = await Emr3.SetPreset(parts[1]);
                            }

                            break;

                        case "NOP":

                            await ParentPage.ResetTimer();

                            json = "{\"Command\": \"NOP\", \"Result\": 0}";

                            break;

                        default:

                            json = string.Format("{{\"Command\": \"{0}\", \"Result\": -99}}", parts[0]);

                            break;
                        }
                    }

                    // Send reply to PDA.
                    await SendMessage(json);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("PDA.ProcessMessage: Exception " + ex.Message);
                }
            }
        }