diff --git a/client.go b/client.go index 66b172b..969595e 100644 --- a/client.go +++ b/client.go @@ -42,6 +42,7 @@ type ClientCommon struct { heartbeatPeriod time.Duration wg stario.WaitGroup netType NetType + showError bool skipKeyExchange bool useHeartBeat bool sequenceDe func([]byte) (interface{}, error) @@ -201,6 +202,12 @@ func (c *ClientCommon) Heartbeat() { } } +func (c *ClientCommon) ShowError(std bool) { + c.mu.Lock() + c.showError = std + c.mu.Unlock() +} + func (c *ClientCommon) readMessage() { for { select { @@ -221,7 +228,9 @@ func (c *ClientCommon) readMessage() { continue } if err != nil { - fmt.Println("client read error", err) + if c.showError { + fmt.Println("client read error", err) + } c.alive.Store(false) c.mu.Lock() c.status = Status{ @@ -269,7 +278,9 @@ func (c *ClientCommon) loadMessage() { //transfer to Msg msg, err := c.sequenceDe(c.msgDe(c.SecretKey, data.Msg)) if err != nil { - fmt.Println("client decode data error", err) + if c.showError { + fmt.Println("client decode data error", err) + } return } message := Message{ @@ -399,6 +410,8 @@ func (c *ClientCommon) sendWait(msg TransferMsg, timeout time.Duration) (Message close(data.Reply) c.noFinSyncMsgPool.Delete(data.TransferMsg.ID) return Message{}, os.ErrDeadlineExceeded + case <-c.stopCtx.Done(): + return Message{}, errors.New("Service shutdown") case msg, ok := <-data.Reply: if !ok { return msg, os.ErrInvalid @@ -420,6 +433,8 @@ func (c *ClientCommon) sendCtx(msg TransferMsg, ctx context.Context) (Message, e close(data.Reply) c.noFinSyncMsgPool.Delete(data.TransferMsg.ID) return Message{}, os.ErrDeadlineExceeded + case <-c.stopCtx.Done(): + return Message{}, errors.New("Service shutdown") case msg, ok := <-data.Reply: if !ok { return msg, os.ErrInvalid diff --git a/clienttype.go b/clienttype.go index a4042a4..47e8c98 100644 --- a/clienttype.go +++ b/clienttype.go @@ -38,6 +38,7 @@ type Client interface { Stop() error StopMonitorChan() <-chan struct{} Status() Status + ShowError(bool) GetSequenceEn() func(interface{}) ([]byte, error) SetSequenceEn(func(interface{}) ([]byte, error)) diff --git a/server.go b/server.go index 5e21b04..966d94f 100644 --- a/server.go +++ b/server.go @@ -41,6 +41,7 @@ type ServerCommon struct { maxHeartbeatLostSeconds int64 sequenceDe func([]byte) (interface{}, error) sequenceEn func(interface{}) ([]byte, error) + showError bool } func NewServer() Server { @@ -64,6 +65,11 @@ func NewServer() Server { } return &server } +func (s *ServerCommon) ShowError(std bool) { + s.mu.Lock() + s.showError = std + s.mu.Unlock() +} func (s *ServerCommon) Stop() error { if !s.alive.Load().(bool) { @@ -184,7 +190,9 @@ func (s *ServerCommon) acceptTU() { } conn, err := s.listener.Accept() if err != nil { - fmt.Println("error accept:", err) + if s.showError { + fmt.Println("error accept:", err) + } continue } var id string @@ -274,7 +282,9 @@ func (s *ServerCommon) loadMessage() { //fmt.Println("received:", float64(time.Now().UnixNano()-nowd)/1000000) msg, err := s.sequenceDe(cc.msgDe(cc.SecretKey, data.Msg)) if err != nil { - fmt.Println("server decode data error", err) + if s.showError { + fmt.Println("server decode data error", err) + } return } //fmt.Println("decoded:", float64(time.Now().UnixNano()-nowd)/1000000) @@ -405,6 +415,8 @@ func (s *ServerCommon) sendWait(c *ClientConn, msg TransferMsg, timeout time.Dur close(data.Reply) s.noFinSyncMsgPool.Delete(data.TransferMsg.ID) return Message{}, os.ErrDeadlineExceeded + case <-s.stopCtx.Done(): + return Message{}, errors.New("Service shutdown") case msg, ok := <-data.Reply: if !ok { return msg, os.ErrInvalid @@ -434,6 +446,8 @@ func (s *ServerCommon) sendCtx(c *ClientConn, msg TransferMsg, ctx context.Conte close(data.Reply) s.noFinSyncMsgPool.Delete(data.TransferMsg.ID) return Message{}, os.ErrClosed + case <-s.stopCtx.Done(): + return Message{}, errors.New("Service shutdown") case msg, ok := <-data.Reply: if !ok { return msg, os.ErrInvalid diff --git a/servertype.go b/servertype.go index 5a947e7..b9262d6 100644 --- a/servertype.go +++ b/servertype.go @@ -40,6 +40,7 @@ type Server interface { SetSequenceEn(func(interface{}) ([]byte, error)) GetSequenceDe() func([]byte) (interface{}, error) SetSequenceDe(func([]byte) (interface{}, error)) + ShowError(bool) HeartbeatTimeoutSec() int64 SetHeartbeatTimeoutSec(int64)