87 lines
1.5 KiB
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)
|
|
}
|
|
}
|
|
|
|
}
|