Skip to content

Commit 97cb101

Browse files
committed
Add stop listener feature
1 parent 54a429b commit 97cb101

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

hare.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ type Listener struct {
1515
SocketListener net.Listener
1616
HasNewMessages func() bool
1717
GetMessage func() string
18+
Stop func()
1819
}
1920

2021
// MessageManager manages message storage
@@ -23,13 +24,15 @@ type MessageManager struct {
2324
Message string
2425
}
2526

26-
func listening(listener Listener, messageManager *MessageManager) error {
27-
for {
27+
func listening(listener Listener, messageManager *MessageManager, running *bool) error {
28+
for *running {
2829
c, _ := listener.SocketListener.Accept()
2930
message, _ := bufio.NewReader(c).ReadString('\n')
3031
messageManager.Message = message
3132
messageManager.HasNewMessages = true
3233
}
34+
listener.SocketListener.Close()
35+
return nil
3336
}
3437

3538
// Listen to socket port
@@ -54,7 +57,13 @@ func Listen(port string) (Listener, error) {
5457
return messageManager.HasNewMessages
5558
}
5659

57-
go listening(listener, &messageManager)
60+
running := true
61+
// Stop the listener
62+
listener.Stop = func() {
63+
running = false
64+
}
65+
66+
go listening(listener, &messageManager, &running)
5867

5968
return listener, nil
6069
}

hare_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,22 @@ func TestGetMessage(t *testing.T) {
6464
}
6565

6666
}
67+
68+
func TestListenStop(t *testing.T) {
69+
expected := "Hello World"
70+
71+
r, _ := Listen("3005")
72+
Send("3005", expected)
73+
74+
if r.HasNewMessages() {
75+
if r.GetMessage() != expected {
76+
t.Errorf("Output different from input")
77+
}
78+
}
79+
80+
r.Stop()
81+
err := Send("3005", "This should fails")
82+
if err == nil {
83+
t.Errorf("Couldn't close connection")
84+
}
85+
}

0 commit comments

Comments
 (0)