hopp/examples/1proc/main.go

87 lines
1.9 KiB
Go

package main
import "io"
import "log"
import "time"
import "errors"
import "context"
import "git.tebibyte.media/sashakoshka/hopp"
var network = "tcp"
var addr = "localhost:7959"
func main() {
go func() {
defer log.Println("SERVER closing")
listener, err := hopp.Listen(network, addr, nil)
if err != nil { log.Println("SERVER", err); return }
log.Println("SERVER listening")
conn, err := listener.Accept()
if err != nil { log.Println("SERVER", err); return }
defer conn.Close()
trans, err := conn.AcceptTrans()
if err != nil { log.Println("SERVER", err); return }
defer trans.Close()
for {
method, data, err := trans.Receive()
if err != nil { log.Println("SERVER", err); return }
log.Println("SERVER got", method, data)
log.Println("SERVER send", method, data)
err = trans.Send(1, data[:])
if err != nil { log.Println("SERVER", err); return }
}
}()
time.Sleep(time.Second * 2)
func() {
log.Println("CLIENT dialing")
conn, err := hopp.Dial(context.Background(), network, addr, nil)
if err != nil { log.Fatalln("CLIENT", err) }
log.Println("CLIENT dialed")
trans, err := conn.OpenTrans()
if err != nil {
log.Println("CLIENT", err)
return
}
go func() {
for {
method, data, err := trans.Receive()
if err != nil {
if !errors.Is(err, io.EOF) {
log.Printf("CLIENT failed to receive message: %v", err)
}
return
}
log.Println("CLIENT got", method, data)
}
}()
data := [1]byte { }
for {
log.Println("CLIENT send", 1, data)
err := trans.Send(1, data[:])
if err != nil {
log.Println("CLIENT", err)
return
}
data[0] ++
time.Sleep(time.Second)
}
log.Println("CLIENT waiting for connection close...")
trans, err = conn.AcceptTrans()
if !errors.Is(err, io.EOF) {
log.Println("CLIENT wrong error:", err)
log.Fatalln("CLIENT trans:", trans)
}
log.Println("CLIENT DONE")
conn.Close()
}()
}