archat-server/client/client.go

117 lines
2.4 KiB
Go
Raw Normal View History

package client
import (
2024-03-24 13:09:36 +00:00
"net/url"
2024-03-24 16:10:02 +00:00
"os"
"time"
2024-03-24 16:10:02 +00:00
"github.com/charmbracelet/log"
2024-03-24 13:09:36 +00:00
"github.com/gorilla/websocket"
cm "krzyzanowski.dev/p2pchat/common"
)
2024-03-24 16:10:02 +00:00
var logger = log.NewWithOptions(os.Stdout, log.Options{
ReportTimestamp: true,
TimeFormat: time.TimeOnly,
Prefix: "👤 Client",
})
func init() {
if cm.IsProd {
logger.SetLevel(log.InfoLevel)
} else {
logger.SetLevel(log.DebugLevel)
}
}
2024-03-24 13:09:36 +00:00
func RunClient() {
u := url.URL{Scheme: "ws", Host: ":8080", Path: "/wsapi"}
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Error("could not connect to websocket")
2024-03-24 13:09:36 +00:00
return
}
2024-03-24 13:09:36 +00:00
defer c.Close()
2024-03-24 16:10:02 +00:00
logger.Info("authenticating...")
2024-03-24 13:09:36 +00:00
rf, _ := cm.RequestFrameFrom(cm.AuthRequest{Nickname: "krzmaciek", Password: "9maciek1"})
err = c.WriteJSON(rf)
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
}
2024-03-24 13:09:36 +00:00
var authResFrame cm.ResponseFrame
err = c.ReadJSON(&authResFrame)
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
}
2024-03-24 13:09:36 +00:00
authRes, err := cm.ResponseFromFrame[cm.AuthResponse](authResFrame)
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
}
2024-03-24 16:10:02 +00:00
logger.Infof("authentication result: %t", authRes.IsSuccess)
2024-03-24 13:09:36 +00:00
time.Sleep(time.Second * 1)
2024-03-24 16:10:02 +00:00
logger.Info("sending echo...")
2024-03-24 13:09:36 +00:00
echoByte := 123
rf, err = cm.RequestFrameFrom(cm.EchoRequest{EchoByte: byte(echoByte)})
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
2024-03-24 13:09:36 +00:00
}
2024-03-24 13:09:36 +00:00
err = c.WriteJSON(rf)
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
}
2024-03-24 13:09:36 +00:00
var echoResFrame cm.ResponseFrame
err = c.ReadJSON(&echoResFrame)
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
2024-03-24 13:09:36 +00:00
}
2024-03-24 13:09:36 +00:00
echoRes, err := cm.ResponseFromFrame[cm.EchoResponse](echoResFrame)
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
2024-03-24 13:09:36 +00:00
}
2024-03-24 16:10:02 +00:00
logger.Infof("sent echo of %d, got %d in return", echoByte, echoRes.EchoByte)
2024-03-24 13:09:36 +00:00
time.Sleep(time.Second)
2024-03-24 16:10:02 +00:00
logger.Infof("i want list of peers...")
2024-03-24 13:09:36 +00:00
rf, err = cm.RequestFrameFrom(cm.ListPeersRequest{})
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
2024-03-24 13:09:36 +00:00
}
2024-03-24 13:09:36 +00:00
err = c.WriteJSON(rf)
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
}
2024-03-24 13:09:36 +00:00
var listPeersResFrame cm.ResponseFrame
err = c.ReadJSON(&listPeersResFrame)
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
2024-03-24 13:09:36 +00:00
}
2024-03-24 13:09:36 +00:00
listPeersRes, err := cm.ResponseFromFrame[cm.ListPeersResponse](listPeersResFrame)
if err != nil {
2024-03-24 16:10:02 +00:00
logger.Fatal(err)
2024-03-24 13:09:36 +00:00
}
2024-03-24 16:10:02 +00:00
logger.Info("printing list of peers:")
2024-03-24 13:09:36 +00:00
for _, p := range listPeersRes.PeersInfo {
2024-03-24 16:10:02 +00:00
logger.Infof("%+v", p)
}
2024-03-24 13:09:36 +00:00
time.Sleep(time.Second * 5)
2024-03-24 16:10:02 +00:00
logger.Info("closing connection...")
2024-03-24 13:09:36 +00:00
c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
}