85 lines
1.8 KiB
Go

package main
import "io"
import "os"
import "log"
import "fmt"
import "time"
import "context"
import "git.tebibyte.media/sashakoshka/hopp"
// import "git.tebibyte.media/sashakoshka/hopp/examples/ping"
func main() {
name := os.Args[0]
if len(os.Args) != 2 {
fmt.Fprintf(os.Stderr, "Usage: %s HOST:PORT\n", name)
os.Exit(2)
}
address := os.Args[1]
conn, err := dial(address)
handleErr(1, err)
trans, err := conn.OpenTrans()
handleErr(1, err)
go func() {
defer fmt.Fprintf(os.Stdout, "(i) disconnected\n")
for {
// message, _, err := ping.Receive(trans)
// if err != nil {
// if !errors.Is(err, io.EOF) {
// handleErr(1, err)
// }
// break
// }
// switch message := message.(type) {
// case *ping.MessagePong:
// log.Printf("--> pong (%d) from %v", message, address)
// }
method, reader, err := trans.ReceiveReader()
if err != nil {
log.Printf("CLIENT recv: %v", err)
return
}
data, err := io.ReadAll(reader)
if err != nil {
log.Printf("CLIENT recv: %v", err)
return
}
log.Println("CLIENT got", method, data)
}
}()
// message := ping.MessagePing(0)
// for {
// log.Printf("<-- ping (%d)", message)
// _, err := ping.Send(trans, &message)
// handleErr(1, err)
// message ++
// time.Sleep(time.Second)
// }
data := [1]byte { }
for {
log.Println("CLIENT send", 1, data)
err := trans.Send(1, data[:])
handleErr(1, err)
data[0] ++
time.Sleep(time.Second)
}
}
func dial(address string) (hopp.Conn, error) {
ctx, done := context.WithTimeout(context.Background(), 16 * time.Second)
defer done()
conn, err := hopp.Dial(ctx, "tcp", address, nil)
if err != nil { return nil, err }
return conn, nil
}
func handleErr(code int, err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %v\n", os.Args[0], err)
os.Exit(code)
}
}