85 lines
1.8 KiB
Go
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)
|
|
}
|
|
}
|