diff --git a/server/modbus.go b/server/modbus.go index 77fcba1..b6ce6b2 100644 --- a/server/modbus.go +++ b/server/modbus.go @@ -7,13 +7,14 @@ import ( "github.com/aldas/go-modbus-client/packet" ) -// modbusTCPAssembler assembles read data into complete packets and calls ModbusHandler with assembled packet -type modbusTCPAssembler struct { +// ModbusTCPAssembler assembles read data into complete packets and calls ModbusHandler with assembled packet +type ModbusTCPAssembler struct { handler ModbusHandler received bytes.Buffer } -func (m *modbusTCPAssembler) ReceiveRead(ctx context.Context, received []byte, bytesRead int) (response []byte, closeConnection bool) { +// ReceiveRead assembles read byte until full TCP packet is formed or return an error when received data does not look like TCP packet +func (m *ModbusTCPAssembler) ReceiveRead(ctx context.Context, received []byte, bytesRead int) (response []byte, closeConnection bool) { m.received.Write(received) n, err := packet.LooksLikeModbusTCP(m.received.Bytes(), false) diff --git a/server/server.go b/server/server.go index 029b85c..82dbab9 100644 --- a/server/server.go +++ b/server/server.go @@ -112,7 +112,7 @@ type ContextRemoteAddr struct{} func (s *Server) serve(ctx context.Context, listener net.Listener, handler ModbusHandler) error { if s.AssemblerCreatorFunc == nil { s.AssemblerCreatorFunc = func(handler ModbusHandler) PacketAssembler { - return &modbusTCPAssembler{handler: handler} + return &ModbusTCPAssembler{handler: handler} } } onErrorFunc := s.OnErrorFunc diff --git a/server/server_test.go b/server/server_test.go index 00a5c83..28cb229 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -33,7 +33,7 @@ func TestRequestToServer(t *testing.T) { // we start the server and listen for incoming connections/data in separate goroutine. ListenAndServe is blocking call. go func() { - err := s.ListenAndServe(ctx, "localhost:5020", mbs) + err := s.ListenAndServe(ctx, "localhost:0", mbs) if err != nil && !errors.Is(err, ErrServerClosed) { assert.NoError(t, err) }