From 39ff08c8962f8ee042d68ef51ef799c5e6ffcd04 Mon Sep 17 00:00:00 2001 From: steffen Date: Tue, 26 Jan 2021 23:35:44 +0000 Subject: [PATCH] first automode is working --- server/block.cc | 9 ++++++--- server/locomotive.cc | 8 ++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/server/block.cc b/server/block.cc index 12a5651..76f9a79 100644 --- a/server/block.cc +++ b/server/block.cc @@ -98,6 +98,7 @@ Block Blocks::GetBlockFromJSON(JSONParse *j) { bl.name[0] = 0; bl.flags = 0; + bl.lockedby[0] = 0; j->GetValue("name", &s); strncpy (bl.name, s.c_str(), REFERENCENAME_LEN); @@ -211,11 +212,13 @@ int Blocks::SetLockedby (string blname, string lockedby, int lock_onoff) { JSONParse jp; int res = -1; + debug (0, "Blocks:SetLockedby block:'%s' locked for '%s' locked:%d", blname.c_str(), lockedby.c_str(), lock_onoff); + Lock(); if ((bl = FindBlock(blname)) != NULL) { - if (lockedby.compare (bl->lockedby) == 0) res = 1; - else if (bl->lockedby[0] == 0) { - strncpy (bl->lockedby, lockedby.c_str(), REFERENCENAME_LEN); + if (lockedby.compare (bl->lockedby) == 0 || bl->lockedby[0] == 0) { + if (lock_onoff) strncpy (bl->lockedby, lockedby.c_str(), REFERENCENAME_LEN); + else bl->lockedby[0] = 0; jp.AddObject("block",_GetJSON(bl)); if(network) network->ChangeListPushToAll(jp.ToString()); res = 1; diff --git a/server/locomotive.cc b/server/locomotive.cc index ab49257..a223c93 100644 --- a/server/locomotive.cc +++ b/server/locomotive.cc @@ -552,6 +552,7 @@ int Locomotives::Loop() { Locomotive *loco = NULL; string block; string sensor; + JSONParse jp; for (lnum = 0; lnum < max; lnum++) if (locomotives[lnum].name[0] != 0) { loco = &locomotives[lnum]; @@ -630,6 +631,13 @@ int Locomotives::Loop() { loco->auto_onroute = LOCO_OR_STOPWAIT; server->railways.UnLockWay(loco->auto_way, loco->name); strncpy (loco->blockassign, loco->blocknext, REFERENCENAME_LEN); + if (strncmp (loco->blockassign, loco->blockdest, REFERENCENAME_LEN) == 0) { + loco->blockdest[0] = 0; + jp.Clear(); + jp.AddObject("locomotive",_GetJSON(lnum)); + if(network) network->ChangeListPushToAll(jp.ToString()); + + } loco->blocknext[0] = 0; timer_start(&loco->auto_timenext); }