examples: More examples
This commit is contained in:
86
examples/1proc/main.go
Normal file
86
examples/1proc/main.go
Normal file
@@ -0,0 +1,86 @@
|
||||
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()
|
||||
}()
|
||||
}
|
||||
Reference in New Issue
Block a user