From e622e6706e8600bd5e1b1cc35b52f4efb16625b3 Mon Sep 17 00:00:00 2001 From: andig Date: Sat, 24 Aug 2024 13:36:52 +0200 Subject: [PATCH] Ocpp: simplify async handling (#15644) --- charger/ocpp/connector.go | 8 ++++---- charger/ocpp/connector_core.go | 2 +- charger/ocpp/cp.go | 26 ++++++++++++-------------- charger/ocpp/cp_core.go | 7 ++++--- 4 files changed, 21 insertions(+), 22 deletions(-) diff --git a/charger/ocpp/connector.go b/charger/ocpp/connector.go index dede825ff..7421de72a 100644 --- a/charger/ocpp/connector.go +++ b/charger/ocpp/connector.go @@ -24,7 +24,7 @@ type Connector struct { status *core.StatusNotificationRequest statusC chan struct{} - meterC chan map[types.Measurand]types.SampledValue + meterC chan struct{} meterUpdated time.Time measurements map[types.Measurand]types.SampledValue @@ -41,9 +41,9 @@ func NewConnector(log *util.Logger, id int, cp *CP, timeout time.Duration) (*Con cp: cp, id: id, clock: clock.New(), - statusC: make(chan struct{}), + statusC: make(chan struct{}, 1), + meterC: make(chan struct{}, 1), measurements: make(map[types.Measurand]types.SampledValue), - meterC: make(chan map[types.Measurand]types.SampledValue), timeout: timeout, } @@ -56,7 +56,7 @@ func (conn *Connector) TestClock(clock clock.Clock) { conn.clock = clock } -func (conn *Connector) MeterSampled() <-chan map[types.Measurand]types.SampledValue { +func (conn *Connector) MeterSampled() <-chan struct{} { return conn.meterC } diff --git a/charger/ocpp/connector_core.go b/charger/ocpp/connector_core.go index 547189d3b..63c5c13ae 100644 --- a/charger/ocpp/connector_core.go +++ b/charger/ocpp/connector_core.go @@ -72,7 +72,7 @@ func (conn *Connector) MeterValues(request *core.MeterValuesRequest) (*core.Mete } select { - case conn.meterC <- conn.measurements: + case conn.meterC <- struct{}{}: default: } diff --git a/charger/ocpp/cp.go b/charger/ocpp/cp.go index 05621d58b..75d005412 100644 --- a/charger/ocpp/cp.go +++ b/charger/ocpp/cp.go @@ -12,17 +12,14 @@ import ( // Since ocpp-go interfaces at charge point level, we need to manage multiple connector separately type CP struct { - mu sync.RWMutex - log *util.Logger - onceConnect sync.Once - onceBoot sync.Once - - bootNotificationRequestC chan *core.BootNotificationRequest + mu sync.RWMutex + log *util.Logger id string - connected bool - connectC chan struct{} + connected bool + connectC chan struct{} + bootNotificationRequestC chan *core.BootNotificationRequest connectors map[int]*Connector } @@ -32,10 +29,10 @@ func NewChargePoint(log *util.Logger, id string) *CP { log: log, id: id, - connectC: make(chan struct{}), - connectors: make(map[int]*Connector), - + connectC: make(chan struct{}, 1), bootNotificationRequestC: make(chan *core.BootNotificationRequest, 1), + + connectors: make(map[int]*Connector), } } @@ -100,9 +97,10 @@ func (cp *CP) connect(connect bool) { cp.connected = connect if connect { - cp.onceConnect.Do(func() { - close(cp.connectC) - }) + select { + case cp.connectC <- struct{}{}: + default: + } } } diff --git a/charger/ocpp/cp_core.go b/charger/ocpp/cp_core.go index 30be76655..2e8bf21e4 100644 --- a/charger/ocpp/cp_core.go +++ b/charger/ocpp/cp_core.go @@ -38,9 +38,10 @@ func (cp *CP) BootNotification(request *core.BootNotificationRequest) (*core.Boo Status: core.RegistrationStatusAccepted, } - cp.onceBoot.Do(func() { - cp.bootNotificationRequestC <- request - }) + select { + case cp.bootNotificationRequestC <- request: + default: + } return res, nil }