Documentation
¶
Overview ¶
Example ¶
package main
import (
"fmt"
"os"
"reflect"
"time"
"github.com/helinwang/netchan"
)
func main() {
const (
unixAddr = "tmp"
tcpAddr = ":8003"
name = "test"
)
type data struct {
A int
B float32
}
tcpSend := make(chan interface{})
unixSend := make(chan interface{})
recv := make(chan interface{})
// this example shows sending and receiving over tcp and unix,
// but you can use only tcp or unix, just send or just
// receive.
sr := netchan.NewSendRecv()
go func() {
err := sr.ListenAndServe("tcp", tcpAddr)
if err != nil {
panic(err)
}
}()
go func() {
err := sr.ListenAndServe("unix", unixAddr)
if err != nil {
panic(err)
}
}()
// wait for the server to start
time.Sleep(30 * time.Millisecond)
s := netchan.NewHandler(sr)
go func() {
err := s.HandleSend("tcp", tcpAddr, name, tcpSend)
if err != nil {
panic(err)
}
}()
go func() {
err := s.HandleSend("unix", unixAddr, name, unixSend)
if err != nil {
panic(err)
}
}()
go func() {
err := s.HandleRecv(name, recv, reflect.TypeOf(data{}))
if err != nil {
panic(err)
}
}()
d := data{A: 1, B: 2}
tcpSend <- d
r := (<-recv).(data)
fmt.Println(r)
d = data{A: 3, B: 4}
unixSend <- d
r = (<-recv).(data)
fmt.Println(r)
err := os.Remove(unixAddr)
if err != nil {
panic(err)
}
}
Output: {1 2} {3 4}
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
func NewHandler ¶
func NewHandler(sr SendRecver) *Handler
func (*Handler) HandleRecv ¶
func (*Handler) HandleSend ¶
type RecvServer ¶
type RecvServer struct {
// contains filtered or unexported fields
}
type SendRecv ¶
type SendRecv struct {
// contains filtered or unexported fields
}
func NewSendRecv ¶
func NewSendRecv() *SendRecv
func (*SendRecv) ListenAndServe ¶
Click to show internal directories.
Click to hide internal directories.