Example #1
0
 public void InitializeParkingspots(List <Parkingspot> parkingspots, IModel channel)
 {
     foreach (var parkingspot in parkingspots)
     {
         IoTRequest request = createInitRequest(parkingspot);
         long       id      = SendNewSource(request, channel, parkingspot.Queue);
         parkingspot.SimulationStatus = ParkingspotSimulationStatus.CREATED;
         parkingspot.ID = id;
     }
 }
Example #2
0
        static void SendStateChange(IModel channel, IoTRequest request, Parkingspot spot)
        {
            var props = channel.CreateBasicProperties();

            props.ContentType = "application/json";

            var s = JsonConvert.SerializeObject(request);
            var b = Encoding.UTF8.GetBytes(s);

            channel.BasicPublish("", spot.Queue, props, b);
        }
Example #3
0
        public void switchState(Parkingspot spot)
        {
            ParkingspotStatus newstatus = Invert(spot.Status);
            string            lpid      = null;

            if (newstatus == ParkingspotStatus.TAKEN)
            {
                lpid = licenseplateIds[random.Next(licenseplateIds.Count)];
            }
            IoTRequest request = createChangeRequest(spot, lpid, newstatus);

            SendStateChange(channel, request, spot);
            spot.Status         = newstatus;
            spot.LicensePlateId = lpid;
        }
Example #4
0
        private int SendNewSource(IoTRequest request, IModel channel, string queue)
        {
            channel.QueueDeclare(queue: queue, durable: true, exclusive: false, autoDelete: false);

            var replyQueueName = channel.QueueDeclare().QueueName;

            var props = channel.CreateBasicProperties();

            props.ReplyTo       = replyQueueName;
            props.CorrelationId = Guid.NewGuid().ToString();
            props.ContentType   = "application/json";
            var s = JsonConvert.SerializeObject(request);
            var b = Encoding.UTF8.GetBytes(s);

            channel.BasicPublish("", queue, props, b);

            var consumer = new QueueingBasicConsumer(channel);

            channel.BasicConsume(replyQueueName, true, consumer);
            var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();

            try
            {
                if (ea.BasicProperties.CorrelationId == props.CorrelationId)
                {
                    IoTResponse resp = JsonConvert.DeserializeObject <IoTResponse>(Encoding.UTF8.GetString(ea.Body));
                    return((int)resp.identifier);
                }
            }
            catch (Exception e)
            {
            }
            finally
            {
                channel.QueueDelete(replyQueueName);
            }
            return(-1);
        }