Ejemplo n.º 1
0
 public GeoFenceObserver(Guid vehicleId, Location location, double radiusInKm)
     : this()
 {
     SubjectId = vehicleId;
     Location = location;
     Radius = radiusInKm;
 }
        private async void observeVehicleButton_Click(object sender, EventArgs e)
        {
            string vehicleGuidString = vehicleIdTextBox.Text;
            Guid vehicleId;
            if (Guid.TryParse(vehicleGuidString, out vehicleId) && !_isDefaultTextObserverName)
            {
                bool isUniqueObserver = true;
                foreach (var keyValue in _observerDictionary)
                {
                    var observer = keyValue.Value;
                    if (String.CompareOrdinal(observer.Name, observerNameTextBox.Text) == 0)
                    {
                        isUniqueObserver = false;
                    }
                }

                if (!isUniqueObserver)
                {
                    MessageBox.Show(this, @"Please choose a unique observer name", @"Error: Observer Creation",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                try
                {
                    var code = new StringBuilder();
                    var console = new StringBuilder();
                    code.AppendLine("// GENERIC OBSERVER");
                    code.AppendLine("//var newObserverResponse = await Client.CreateAsync(new Observer(ObserverType.Generic)");
                    code.AppendLine("//                             {");
                    code.AppendLine("//                                 Name = observerNameTextBox.Text,");
                    code.AppendLine("//                                 AppId = ApplicationId,");
                    code.AppendLine("//                                 Subject = \"Vehicle\",");
                    code.AppendLine("//                                 SubjectId = vehicleId,");
                    code.AppendLine("//                                 Transports = Transport.SignalR");
                    code.AppendLine("//                             });");
                    code.AppendLine();
                    code.AppendLine("// EVENT OBSERVER - IgnitionOn & Ignition Off");
                    code.AppendLine("//var newObserverResponse = await Client.CreateAsync(new EventObserver(vehicleId, new EventType[] { EventType.IgnitionOn, EventType.IgnitionOff }, ObserverTiming.leading)");
                    code.AppendLine("//                             {");
                    code.AppendLine("//                                 Name = observerNameTextBox.Text,");
                    code.AppendLine("//                                 AppId = ApplicationId,");
                    code.AppendLine("//                                 Transports = Transport.SignalR");
                    code.AppendLine("//                             });");
                    code.AppendLine();
                    code.AppendLine("// GEO FENCE OBSERVER");
                    code.AppendLine("var location = new Location()");
                    code.AppendLine("{");
                    code.AppendLine("   Lat = 49.25784,");
                    code.AppendLine("   Lng = -123.17184");
                    code.AppendLine("};");
                    code.AppendLine("var newObserverResponse = await Client.CreateAsync(new GeoFenceObserver(vehicleId, location, 1)");
                    code.AppendLine("{");
                    code.AppendLine("   Name = observerNameTextBox.Text,");
                    code.AppendLine("   AppId = ApplicationId,");
                    code.AppendLine("   Subject = \"Vehicle\",");
                    code.AppendLine("   Transports = Transport.SignalR");
                    code.AppendLine("});");
                    code.AppendLine("var observer = newObserverResponse.Data;");
                    code.AppendLine("var status = newObserverResponse.StatusCode;");
                    code.AppendLine("var errorMessage = newObserverResponse.ErrorMessage;");
                    code.AppendLine("if (status == HttpStatusCode.OK && observer.Id != Guid.Empty)");
                    code.AppendLine("{");
                    code.AppendLine("   _observerDictionary.Add(observer.Id, observer);");
                    code.AppendLine("   await Client.Observe(observer.Id);");
                    code.AppendLine("   Client.ObserveHandler += delegate(GuidEntity entity)");
                    code.AppendLine("   {");
                    code.AppendLine("       // HANDLE CALL BACK CODE");
                    code.AppendLine("   };");
                    code.AppendLine("}");

                    // GEO FENCE OBSERVER
                    var location = new Location()
                    {
                        Lat = 49.25784,
                        Lng = -123.17184
                    };
                    var newObserverResponse = await Client.CreateAsync(new GeoFenceObserver(vehicleId, location, 1)
                    {
                        Name = observerNameTextBox.Text,
                        AppId = ApplicationId,
                        Subject = "Vehicle",
                        Transports = Transport.SignalR
                    });

                    var observer = newObserverResponse.Data;
                    var status = newObserverResponse.StatusCode;
                    var errorMessage = newObserverResponse.ErrorMessage;

                    if (status == HttpStatusCode.OK && observer.Id != Guid.Empty)
                    {
                        _observerDictionary.Add(observer.Id, observer);
                        await Client.Observe(observer.Id);

                        _codeWindow.DisplayNewCode(code.ToString());
                        _consoleWindow.DisplayModifiedObservers(@"The following observer has been created!",observer);

                        Client.ObserveHandler += delegate(GuidEntity entity)
                        {
                            if (entity.GetType() == typeof(Vehicle))
                            {
                                this.Invoke(new Action(() =>
                                {
                                    MessageBox.Show(this, entity.IdToString, @"Observer Call Back",
                                        MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                }));
                            }
                            else if (entity.GetType() == typeof (Event))
                            {
                                this.Invoke(new Action(() =>
                                {
                                    MessageBox.Show(this, entity.IdToString, @"Observer Call Back",
                                        MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                }));
                            }
                            else
                            {
                                this.Invoke(new Action(() =>
                                {
                                    MessageBox.Show(this, @"Observer Call Back Occured", @"Observer Call Back");
                                }));
                            }
                        };
                    }
                    else
                    {
                        console.AppendLine("Failed to create a new observer!");
                        console.AppendLine(errorMessage);
                        _consoleWindow.DisplayErrorMessage(console.ToString());
                    }
                }
                catch (Exception ex)
                {
                    _consoleWindow.DisplayErrorMessage("Failed to setup an observer for User");
                    MessageBox.Show(this, @"An exception was thrown by Mojio Client while setting up an Observer\nException Message: " + ex.Message, @"Exception Thrown");
                }
            }
            else
            {
                MessageBox.Show(this, @"Invalid Vehicle Id or Observer Name", @"Error: Observer Creation",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }