examples/chat: Make chat example compile

This commit is contained in:
2025-10-19 13:18:24 -04:00
parent e5d7ad0702
commit 14a317c2ab
7 changed files with 134 additions and 178 deletions

View File

@@ -17,8 +17,8 @@ func main() {
}
address := os.Args[1]
room := os.Args[2]
var nickname hopp.Option[string]; if len(os.Args) >= 4 {
nickname = hopp.O(os.Args[3])
nickname := "Anonymous"; if len(os.Args) >= 4 {
nickname = os.Args[3]
}
trans, err := join(address, room, nickname)
handleErr(1, err)
@@ -31,15 +31,11 @@ func main() {
}
}()
for {
message, err := chat.Receive(trans)
message, _, err := chat.Receive(trans)
handleErr(1, err)
switch message := message.(type) {
case *chat.MessageChat:
nickname := "Anonymous"
if value, ok := message.Nickname.Get(); ok {
nickname = value
}
fmt.Fprintf(os.Stdout, "%s: %s\n", nickname, message.Content)
fmt.Fprintf(os.Stdout, "%s: %s\n", message.Nickname, message.Content)
case *chat.MessageJoinNotify:
fmt.Fprintf(os.Stdout, "(i) %s joined the room\n", message.Nickname)
case *chat.MessageLeaveNotify:
@@ -48,7 +44,7 @@ func main() {
}
}
func join(address string, room string, nickname hopp.Option[string]) (hopp.Trans, error) {
func join(address string, room string, nickname string) (hopp.Trans, error) {
ctx, done := context.WithTimeout(context.Background(), 16 * time.Second)
defer done()
dialer := hopp.Dialer {
@@ -57,41 +53,24 @@ func join(address string, room string, nickname hopp.Option[string]) (hopp.Trans
InsecureSkipVerify: true,
},
}
conn, err := dialer.Dial(ctx, "quic", address)
if err != nil { return nil, err }
err = updateProfile(conn, nickname)
conn, err := dialer.Dial(ctx, "tcp", address)
if err != nil { return nil, err }
transRoom, err := conn.OpenTrans()
if err != nil { return nil, err }
err = chat.Send(transRoom, &chat.MessageJoin {
Room: room,
_, err = chat.Send(transRoom, &chat.MessageJoin {
Room: room,
Nickname: nickname,
})
if err != nil { return nil, err }
return transRoom, nil
}
func send(trans hopp.Trans, content string) error {
return chat.Send(trans, &chat.MessageChat {
_, err := chat.Send(trans, &chat.MessageChat {
Content: content,
})
}
func updateProfile(conn hopp.Conn, nickname hopp.Option[string]) error {
trans, err := conn.OpenTrans()
if err != nil { return err }
defer trans.Close()
err = chat.Send(trans, &chat.MessageUpdateProfile {
Nickname: nickname,
})
if err != nil { return err }
message, err := chat.Receive(trans)
if err != nil { return err }
switch message := message.(type) {
case *chat.MessageError: return message
default: return nil
}
return err
}
func handleErr(code int, err error) {