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; } }
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); }
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; }
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); }