实时更新地图 - 定时器类 - c#

时间:2018-01-07 20:13:11

标签: c# asp.net json google-maps timer

我正在使用asp.net构建项目。 该项目的一部分是一个视图(使用谷歌地图api),在地图上显示带有maerkers的停车场的状态。 我正在使用JSON文件来创建标记。

此外,我使用arduino和一些指示停车场状态的传感器。

我希望这个Json会更新(覆盖前一个)每2秒(这样如果一辆车进入停车场并且现在已经满了 - 它将在地图上显示为已满)

我有两个创建这个Json的函数,我想按照我之前的说法每2秒调用一次。

我做不到。我很乐意接受你的帮助。

视图页面的名称:" TotalPs"。

这是相关功能所在的控制器:

    public ActionResult TotalPs()
    {

        ViewBag.Message = "TotalPs";
        return View();

    }

    public ActionResult TotalPData()
    {
        ReadArduino(); //READ THE DATA FROM THE ARDUINO
        callA(); // CREATES THE FIRST JSON
        callB(); // CREATES THE 2ND JSON


        var totalQueryParkingLot =
                from lot in db.parkingLots
                orderby lot.PricePerHour
                select lot;

        return Json(totalQueryParkingLot);
    }

    public void callA()
    {

        var totalQueryParkingLot =
                from lot in db.parkingLots
                orderby lot.PricePerHour
                select lot;

        var data2 = totalQueryParkingLot.ToList();

        var jsonString2 = JsonConvert.SerializeObject(data2);

        if (jsonString2 != null)
        {
            if (!Directory.Exists(Server.MapPath("~/Content/")))
            {
                Directory.CreateDirectory(Server.MapPath("~/Content/"));
            }

        }

        System.IO.File.WriteAllText(Server.MapPath("~/Content/TotalJsonPL.json"), jsonString2);

    }

    public void callB()
    {

        var FreeQueryParkingLot =
           from pub in db.publicParkings
           orderby pub.PricePerHourpublicParking
           select pub;

        var data8 = FreeQueryParkingLot.ToList();

        var jsonString3 = JsonConvert.SerializeObject(data8);

        if (jsonString3 != null)
        {
            if (!Directory.Exists(Server.MapPath("~/Content/")))
            {
                Directory.CreateDirectory(Server.MapPath("~/Content/"));
            }

        }

        System.IO.File.WriteAllText(Server.MapPath("~/Content/TotalJsonPU.json"), jsonString3);

    }

        public void ReadArduino()
    {
        SerialPort port = new SerialPort("COM3", 9600);
        port.BaudRate = 9600;
        port.PortName = "COM3";
        port.Open();

        bool status1 = true;
        bool status2 = true;
        bool status3 = true;
        char[] arr = new char[4];


       String data_arduino = port.ReadLine();


            for (int i = 0; i < arr.Length; i++)
            {
                char first = data_arduino[i];
                arr[i] = first;
            }


        int space = arr[0] - 48;

        var arduinoQuery1 = from b in db.parkingLots where b.parkingLotID == 22 select b;

        foreach (parkingLot parkingLot in arduinoQuery1)
        {
            parkingLot.freeSpaces = space;
        }
        db.SaveChanges();

    }

在视图中,我调用调用其他函数的函数TotalPData()。

View

TNX !!

1 个答案:

答案 0 :(得分:1)

我假设您正在应用ajax调用来检索json数据。因此,您可以使用setInterval分配间隔以定期执行ajax调用。

var interval = setInterval(ajaxCall, 5000); //5000 MS == 5 seconds

function ajaxCall() {
   clearInterval(interval);
   $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: 'Controller/TotalPData',
        dataType: "json",
        success: function (response) {
            interval = setInterval(ajaxCall, 5000);
            // Do something
        },
        error: function (a, b, c) {

        }
   });
}

此外,最好使用SignalR来执行此类要求。

SignalR