From 7e0a59bfe402bc48c6a2629efa227426332338a9 Mon Sep 17 00:00:00 2001 From: matst80 Date: Sun, 10 Nov 2024 17:10:29 +0100 Subject: [PATCH] always connect --- tcp-mux-client.go | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/tcp-mux-client.go b/tcp-mux-client.go index e1816d7..394e7fe 100644 --- a/tcp-mux-client.go +++ b/tcp-mux-client.go @@ -12,12 +12,13 @@ type Client struct { } func Dial(address string) (*Client, error) { - conn, err := net.Dial("tcp", address) + + mux, err := NewTCPClientMux(address) if err != nil { return nil, err } client := &Client{ - TCPClientMux: NewTCPClientMux(conn), + TCPClientMux: mux, } return client, nil } @@ -28,14 +29,40 @@ func (c *Client) Close() { type TCPClientMux struct { net.Conn + Errors chan error + ErrorCount int + address string *PacketQueue } -func NewTCPClientMux(connection net.Conn) *TCPClientMux { - return &TCPClientMux{ - Conn: connection, - PacketQueue: NewPacketQueue(connection), +func NewTCPClientMux(address string) (*TCPClientMux, error) { + connection, err := net.Dial("tcp", address) + if err != nil { + return nil, err } + return &TCPClientMux{ + Errors: make(chan error), + ErrorCount: 0, + Conn: connection, + address: address, + PacketQueue: NewPacketQueue(connection), + }, nil +} + +func (m *TCPClientMux) Connect() error { + if m.Conn == nil { + connection, err := net.Dial("tcp", m.address) + if err != nil { + + m.Errors <- err + m.ErrorCount++ + + return err + } + m.ErrorCount = 0 + m.Conn = connection + } + return nil } func (m *TCPClientMux) Close() { @@ -43,7 +70,11 @@ func (m *TCPClientMux) Close() { } func (m *TCPClientMux) SendPacket(messageType uint16, data []byte) error { - err := binary.Write(m.Conn, binary.LittleEndian, Packet{ + err := m.Connect() + if err != nil { + return err + } + err = binary.Write(m.Conn, binary.LittleEndian, Packet{ Version: 1, MessageType: messageType, DataLength: uint16(len(data)),