examples/ping: Client accepts pong

This commit is contained in:
Sasha Koshka 2025-11-19 19:34:02 -05:00
parent 1cf9d47cae
commit 11e972c696
3 changed files with 18 additions and 12 deletions

View File

@ -42,11 +42,11 @@ func main() {
break break
} }
switch message := message.(type) { switch message := message.(type) {
case *chat.MessageChat: case chat.MessageChat:
fmt.Fprintf(os.Stdout, "%s: %s\n", message.Nickname, message.Content) fmt.Fprintf(os.Stdout, "%s: %s\n", message.Nickname, message.Content)
case *chat.MessageJoinNotify: case chat.MessageJoinNotify:
fmt.Fprintf(os.Stdout, "(i) %s joined the room\n", message.Nickname) fmt.Fprintf(os.Stdout, "(i) %s joined the room\n", message.Nickname)
case *chat.MessageLeaveNotify: case chat.MessageLeaveNotify:
fmt.Fprintf(os.Stdout, "(i) %s left the room\n", message.Nickname) fmt.Fprintf(os.Stdout, "(i) %s left the room\n", message.Nickname)
} }
} }

View File

@ -98,20 +98,27 @@ func (this *client) transTalk(trans hopp.Trans, initial *chat.MessageJoin) error
err := this.joinRoom(trans, room) err := this.joinRoom(trans, room)
if err != nil { return err } if err != nil { return err }
defer this.leaveRoom(trans, room) defer this.leaveRoom(trans, room)
_, err = chat.Send(trans, &chat.MessageChat {
Content: "(i) joined " + room,
Nickname: "SYSTEM",
})
if err != nil { return err }
for { for {
message, _, err := chat.Receive(trans) message, _, err := chat.Receive(trans)
if err != nil { return err } if err != nil { return err }
switch message := message.(type) { switch message := message.(type) {
case *chat.MessageChat: case chat.MessageChat:
err := this.handleMessageChat(trans, room, message) err := this.handleMessageChat(trans, room, message)
if err != nil { return err } if err != nil { return err }
case *chat.MessageError: case chat.MessageError:
return message return &message
} }
} }
} }
func (this *client) handleMessageChat(trans hopp.Trans, room string, message *chat.MessageChat) error { func (this *client) handleMessageChat(trans hopp.Trans, room string, message chat.MessageChat) error {
log.Printf("(). %s #%s: %s", this.nickname, room, message.Content) log.Printf("(). %s #%s: %s", this.nickname, room, message.Content)
clients, done := clients.RBorrow() clients, done := clients.RBorrow()
defer done() defer done()
@ -124,11 +131,11 @@ func (this *client) handleMessageChat(trans hopp.Trans, room string, message *ch
return nil return nil
} }
func (this *client) relayMessage(room string, message *chat.MessageChat) error { func (this *client) relayMessage(room string, message chat.MessageChat) error {
rooms, done := this.rooms.RBorrow() rooms, done := this.rooms.RBorrow()
defer done() defer done()
if trans, ok := rooms[room]; ok { if trans, ok := rooms[room]; ok {
_, err := chat.Send(trans, message) _, err := chat.Send(trans, &message)
if err != nil { if err != nil {
return fmt.Errorf("could not relay message: %w", err) return fmt.Errorf("could not relay message: %w", err)
} }

View File

@ -25,12 +25,11 @@ func main() {
go func() { go func() {
message := ping.MessagePing(0) message := ping.MessagePing(0)
for { for _ = range time.Tick(time.Second) {
log.Printf("<-- ping (%d)", message) log.Printf("<-- ping (%d)", message)
_, err := ping.Send(trans, &message) _, err := ping.Send(trans, &message)
handleErr(1, err) handleErr(1, err)
message ++ message ++
time.Sleep(time.Second)
} }
}() }()
@ -44,7 +43,7 @@ func main() {
break break
} }
switch message := message.(type) { switch message := message.(type) {
case *ping.MessagePong: case ping.MessagePong:
log.Printf("--> pong (%d) from %v", message, address) log.Printf("--> pong (%d) from %v", message, address)
} }
} }