Esempio n. 1
0
        public static async Task HandleMessage <T>(QueueElement <T> message)
        {
            Console.WriteLine("Message received through HandleMessage()");
            var imageUrl = "";

            //var message = await serviceBus.GetMessage<QueueElement<object>>(m);
            switch (message.Type)
            {
            case "TelemetrySend":     // FROM OTHER WORKER
                var telemetrySendModel = ForceCast <Telemetry>(message.Data);
                telemetryRepository.Insert(telemetrySendModel);
                break;

            case "ActivityClose":     // TO WORKER TRIO
                var closeData = ForceCast <QueueElement <ActivityIdViewModel> >(message);
                activityRepository.Close(closeData.Data.Id);
                //--
                closeData.Data.FromOrganizer = true;
                await queueToOtherWorker.SendMessage(closeData);

                //--
                break;

            case "ActivityStart":
                var startData = ForceCast <QueueElement <ActivityIdViewModel> >(message);  // GetValue<int>(message.Data);
                activityRepository.Start(startData.Data.Id);
                //--
                startData.Data.FromOrganizer = true;
                await queueToOtherWorker.SendMessage(startData);

                //--

                break;

            case "ActivityCreate":
                var activityCreateModel = ForceCast <ActivityCreateViewModel>(message.Data);
                activityRepository.Insert(new Activity()
                {
                    //    Id = 0,
                    CreationDate = DateTime.Now,
                    EndDate      = null,
                    Location     = activityCreateModel.Location,
                    Name         = activityCreateModel.Name,
                    RaceUrl      = "", //$"https://localhost/raceSample/{new Random().Next(0, 1000)}",
                    IdUser       = activityCreateModel.IdUser,
                    Status       = 0,
                    Type         = activityCreateModel.Type,
                });
                break;

            case "ActivityJoin":
                var activityJoinModel = ForceCast <ActivityIdViewModel>(message.Data);
                activityRepository.AddRunner(
                    activityJoinModel.Id,
                    activityJoinModel.IdUser
                    );
                break;
            }
        }
        public static void Run([EventHubTrigger("itsrunningeventhub", Connection = "EventHubCS")] string myEventHubMessage, TraceWriter log)
        {
            log.Info($"C# Event Hub trigger function processed a message: {myEventHubMessage}");
            var message = JsonConvert.DeserializeObject <TelemetryData>(myEventHubMessage);

            string cs        = Environment.GetEnvironmentVariable("SqlConnectionString");
            var    db        = new TelemetryRepository(cs);
            var    telemetry = new Telemetry()
            {
                Latitude   = message.Latitude,
                Longitude  = message.Longitude,
                Instant    = message.Instant,
                IdActivity = message.IdActivity
            };

            db.Insert(telemetry, message.Username);
        }
Esempio n. 3
0
        public static void Run([QueueTrigger("coordinates-queue", Connection = "StorageConnectionString")] string queueItem, TraceWriter log)
        {
            var listOfCoordinates = JsonConvert.DeserializeObject <IEnumerable <TelemetryMessageModel> >(queueItem);

            string cs = Environment.GetEnvironmentVariable("RunnersDbConnectionString", EnvironmentVariableTarget.Process);
            TelemetryRepository repository = new TelemetryRepository(cs);

            foreach (TelemetryMessageModel item in listOfCoordinates)
            {
                var telemetry = new Telemetry()
                {
                    Latitude   = item.Latitude,
                    Longitude  = item.Longitude,
                    Instant    = DateTimeOffset.Now,
                    IdRunner   = 1,
                    IdActivity = 1,
                    SelfiUri   = "fodengURI"
                };
                //ERROR: file or assembly not found
                repository.Insert(telemetry);
            }
        }
Esempio n. 4
0
        static async Task Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
            IConfigurationRoot configuration = builder.Build();

            // Retrieve storage account from connection string.
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
                configuration.GetConnectionString("StorageConnectionString"));

            // Create the queue client.
            CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

            // Retrieve a reference to a queue.
            CloudQueue queue = queueClient.GetQueueReference(
                configuration.GetConnectionString("QueueName"));

            TelemetryRepository repository = new TelemetryRepository(
                configuration.GetConnectionString("RunnersDbConnectionString"));

            while (true)
            {
                var message = await queue.GetMessageAsync();

                if (message == null)
                {
                    await Task.Delay(1000);

                    continue;
                }

                /*
                 * JObject jsonMessage = JObject.Parse(message.AsString);
                 *
                 * int idActivity = (int)jsonMessage["ActivityId"];
                 * int idRunner = (int)jsonMessage["RunnerId"];
                 *
                 * IList<JToken> results = jsonMessage["Telemetry"].Children().ToList();
                 * var listOfCoordinates = new List<TelemetryModel>();
                 * foreach (JToken result in results)
                 * {
                 *  TelemetryModel searchResult = result.ToObject<TelemetryModel>();
                 *  listOfCoordinates.Add(searchResult);
                 * }
                 */

                var messageDeserialized = Newtonsoft.Json.JsonConvert.DeserializeObject <TelemetryModel>(message.AsString);

                var telemetry = new Telemetry()
                {
                    Latitude   = messageDeserialized.Latitude,
                    Longitude  = messageDeserialized.Longitude,
                    Instant    = messageDeserialized.Instant,
                    IdActivity = messageDeserialized.ActivityId,
                    SelfiUri   = null
                };
                repository.Insert(telemetry);

                Console.WriteLine(message.Id + " - is on databese");

                //delete item in queue when message is inserted on database
                await queue.DeleteMessageAsync(message);
            }
        }
Esempio n. 5
0
        public static async Task HandleMessage <T>(QueueElement <T> message)
        {
            Console.WriteLine("Message received through HandleMessage()");
            var imageUrl = "";
            //var message = await serviceBus.GetMessage<QueueElement<object>>(m);
            int redirectId = 0;

            switch (message.Type)
            {
            case "TelemetrySend":     // EVENT HUB EVENT
                imageUrl = "";
                var telemetrySendModel = ForceCast <TelemetrySendViewModel>(message.Data);
                if (telemetrySendModel.Image.Length > 0)
                {
                    var imageData = Convert.FromBase64String(FixBase64(telemetrySendModel.Image));
                    imageUrl = blobStorage.UploadByteBlob(
                        blobSend,
                        $"{telemetrySendModel.IdActivity}/{telemetrySendModel.IdUser}/{DateTime.Now}_{new Random().Next(0, 20)}.png",
                        "image/png",
                        imageData
                        ).GetAwaiter().GetResult();
                }

                var telemetryModel = new Telemetry()
                {
                    Longitude  = telemetrySendModel.Longitude,
                    Latitude   = telemetrySendModel.Latitude,
                    IdActivity = telemetrySendModel.IdActivity,
                    IdUser     = telemetrySendModel.IdUser,
                    ImageUrl   = imageUrl,
                    Instant    = telemetrySendModel.Instant
                };
                telemetryRepository.Insert(telemetryModel);
                //--
                telemetryModel.IdActivity = telemetrySendModel.IdActivityOrganizer;
                await eventHubSendToOrganizer.SendMessage(new QueueElement <Telemetry>() {
                    Type = "TelemetrySend",
                    Data = telemetryModel
                });

                //--
                break;

            // The organizer events cannot be closed by the client
            case "ActivityClose":
                var closeData = ForceCast <ActivityIdViewModel>(message.Data);
                if (closeData.FromOrganizer)
                {
                    closeData.Id = activityRepository.GetIdFromOrganizerId(closeData.Id);
                }

                activityRepository.Close(closeData.Id);
                redirectId = closeData.IdUser;
                break;

            case "ActivityStart":
                var startData = ForceCast <ActivityIdViewModel>(message.Data);    // GetValue<int>(message.Data);
                if (startData.FromOrganizer)
                {
                    startData.Id = activityRepository.GetIdFromOrganizerId(startData.Id);
                }
                activityRepository.Start(startData.Id);
                redirectId = startData.IdUser;
                break;

            case "ActivityCreate":
                var activityCreateModel = ForceCast <ActivityCreateViewModel>(message.Data);
                activityRepository.Insert(new Activity()
                {
                    //    Id = 0,
                    CreationDate = DateTime.Now,
                    EndDate      = null,
                    Location     = activityCreateModel.Location,
                    Name         = activityCreateModel.Name,
                    RaceUrl      = "",
                    IdUser       = activityCreateModel.IdUser,
                    Status       = 0,
                    Type         = activityCreateModel.Type,
                });


                redirectId = activityCreateModel.IdUser;
                break;

            case "ActivityJoin":
                var activityJoinModel = ForceCast <ActivityIdViewModel>(message.Data);
                activityRepository.AddRunner(
                    activityJoinModel.Id,
                    activityJoinModel.IdUser
                    );
                //--
                var activityStat = activityRepository.Get(activityJoinModel.Id);
                if (activityStat.Type == 2)
                {
                    await eventHubSendToOrganizer.SendMessage(message);
                }
                //--
                redirectId = activityJoinModel.IdUser;
                break;

            case "UserPhotoUpdate":
                imageUrl = "";
                var userPhotoUpdateModel = ForceCast <UserPhotoUpdateViewModel>(message.Data);
                if (userPhotoUpdateModel.Image.Length > 0)
                {
                    var imageData = Convert.FromBase64String(FixBase64(userPhotoUpdateModel.Image));
                    imageUrl = blobStorage.UploadByteBlob(
                        userpicSend,
                        $"{userPhotoUpdateModel.IdUser}/{DateTime.Now}_{new Random().Next(0, 20)}.png",
                        "image/png",
                        imageData
                        ).GetAwaiter().GetResult();
                }

                userRepository.UpdateImage(userPhotoUpdateModel.IdUser, imageUrl);

                redirectId = userPhotoUpdateModel.IdUser;

                break;
            }
            if (redirectId > 0)
            {
                // Alert for redirect

                //if (UseEventHub)
                //{

                /*
                 * await eventHubSend.SendMessage(new QueueElement<SignalRRedirectViewModel>
                 * {
                 *  Type = "SignalRRedirectResponse",
                 *  Data = new SignalRRedirectViewModel()
                 *  {
                 *      Username = userRepository.Get(redirectId).Name
                 *  },
                 * });*/
                //}
                // else
                // {
                await responseClient.SendMessage(new QueueElement <SignalRRedirectViewModel>
                {
                    Type = "SignalRRedirectResponse",
                    Data = new SignalRRedirectViewModel()
                    {
                        Username = userRepository.Get(redirectId).Name
                    },
                });

                //}
            }
        }