2024-03-22 18:38:19 +00:00
|
|
|
package client
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
2024-03-24 13:09:36 +00:00
|
|
|
"net/url"
|
2024-03-22 18:38:19 +00:00
|
|
|
"time"
|
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
"github.com/gorilla/websocket"
|
2024-03-22 18:38:19 +00:00
|
|
|
cm "krzyzanowski.dev/p2pchat/common"
|
|
|
|
)
|
|
|
|
|
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)
|
2024-03-22 18:38:19 +00:00
|
|
|
|
|
|
|
if err != nil {
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Println("[Client] could not connect to websocket")
|
|
|
|
return
|
2024-03-22 18:38:19 +00:00
|
|
|
}
|
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
defer c.Close()
|
2024-03-22 18:38:19 +00:00
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Println("[Client] authenticating...")
|
|
|
|
rf, _ := cm.RequestFrameFrom(cm.AuthRequest{Nickname: "krzmaciek", Password: "9maciek1"})
|
|
|
|
err = c.WriteJSON(rf)
|
2024-03-22 18:38:19 +00:00
|
|
|
if err != nil {
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Fatalln(err)
|
2024-03-22 18:38:19 +00:00
|
|
|
}
|
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
var authResFrame cm.ResponseFrame
|
|
|
|
err = c.ReadJSON(&authResFrame)
|
2024-03-22 18:38:19 +00:00
|
|
|
if err != nil {
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Fatalln(err)
|
2024-03-22 18:38:19 +00:00
|
|
|
}
|
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
authRes, err := cm.ResponseFromFrame[cm.AuthResponse](authResFrame)
|
2024-03-22 18:38:19 +00:00
|
|
|
if err != nil {
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Fatalln(err)
|
2024-03-22 18:38:19 +00:00
|
|
|
}
|
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Printf("[Client] authentication result: %t\n", authRes.IsSuccess)
|
|
|
|
time.Sleep(time.Second * 1)
|
2024-03-22 18:38:19 +00:00
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Println("[Client] sending echo...")
|
|
|
|
echoByte := 123
|
|
|
|
rf, err = cm.RequestFrameFrom(cm.EchoRequest{EchoByte: byte(echoByte)})
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
2024-03-22 18:38:19 +00:00
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
err = c.WriteJSON(rf)
|
2024-03-22 18:38:19 +00:00
|
|
|
if err != nil {
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Fatalln(err)
|
2024-03-22 18:38:19 +00:00
|
|
|
}
|
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
var echoResFrame cm.ResponseFrame
|
|
|
|
err = c.ReadJSON(&echoResFrame)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
2024-03-22 18:38:19 +00:00
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
echoRes, err := cm.ResponseFromFrame[cm.EchoResponse](echoResFrame)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
2024-03-22 18:38:19 +00:00
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Printf("[Client] sent echo of %d, got %d in return\n", echoByte, echoRes.EchoByte)
|
|
|
|
time.Sleep(time.Second)
|
2024-03-22 18:38:19 +00:00
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Println("[Client] i want list of peers...")
|
|
|
|
rf, err = cm.RequestFrameFrom(cm.ListPeersRequest{})
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
2024-03-22 18:38:19 +00:00
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
err = c.WriteJSON(rf)
|
2024-03-22 18:38:19 +00:00
|
|
|
if err != nil {
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Fatalln(err)
|
2024-03-22 18:38:19 +00:00
|
|
|
}
|
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
var listPeersResFrame cm.ResponseFrame
|
|
|
|
err = c.ReadJSON(&listPeersResFrame)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
2024-03-22 18:38:19 +00:00
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
listPeersRes, err := cm.ResponseFromFrame[cm.ListPeersResponse](listPeersResFrame)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
}
|
2024-03-22 18:38:19 +00:00
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
log.Println("[Client] printing list of peers:")
|
2024-03-22 18:38:19 +00:00
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
for _, p := range listPeersRes.PeersInfo {
|
|
|
|
log.Printf("[Client] %+v\n", p)
|
2024-03-22 18:38:19 +00:00
|
|
|
}
|
|
|
|
|
2024-03-24 13:09:36 +00:00
|
|
|
time.Sleep(time.Second * 5)
|
|
|
|
c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
|
2024-03-22 18:38:19 +00:00
|
|
|
}
|