testing/contree/dialer.go

87 lines
1.5 KiB
Go

package main
import (
"encoding/json"
"fmt"
"log"
"net"
"time"
"github.com/pion/logging"
"github.com/pion/sctp"
)
func dial(address string) {
// Dial the target.
dialConn, err := net.Dial("udp", address)
if err != nil {
log.Panic(err)
}
defer func() {
if closeErr := dialConn.Close(); closeErr != nil {
panic(err)
}
}()
fmt.Println("Dialed UDP")
// Create the client.
config := sctp.Config{
NetConn: dialConn,
LoggerFactory: logging.NewDefaultLoggerFactory(),
}
client, err := sctp.Client(config)
if err != nil {
log.Panic(err)
}
defer func() {
if closeErr := client.Close(); closeErr != nil {
panic(err)
}
}()
fmt.Println("Created client")
// Create the stream.
stream, err := client.OpenStream(0, sctp.PayloadTypeWebRTCString)
if err != nil {
log.Panic(err)
}
defer func() {
if closeErr := stream.Close(); closeErr != nil {
panic(err)
}
}()
stream.SetReliabilityParams(false, sctp.ReliabilityTypeReliable, 10)
fmt.Println("Created stream")
// Writer
go func() {
enc := json.NewEncoder(stream)
msgNum := 1
for {
time.Sleep(2 * time.Second)
enc.Encode(Message{
seq: msgNum,
msg: "from dialer",
})
msgNum++
}
}()
// Reader
dec := json.NewDecoder(stream)
log.Println("dailer: Made a JSON stream")
for {
var msg Message
err := dec.Decode(&msg)
if err == nil {
fmt.Printf("dialer: Got msg %+v\n", msg)
if msg.msg == "bye" {
return
}
} else {
fmt.Printf("dialer: Got error %+v\n", err)
}
}
}