github.com/ngjaying/can@v1.0.4/example/server/mockUdp.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "github.com/ngjaying/can" 7 "github.com/ngjaying/can/pkg/socketcan" 8 "os" 9 "os/signal" 10 "syscall" 11 "time" 12 ) 13 14 func main() { 15 e, err := socketcan.NewEmulator() 16 if err != nil { 17 panic(err) 18 } 19 fmt.Printf("Emulator started on %s, %s\n", e.Addr().Network(), e.Addr().String()) 20 ctx, cancel := context.WithCancel(context.Background()) 21 go func() { 22 err = e.Run(ctx) 23 if err != nil { 24 panic(err) 25 } 26 }() 27 recv := getReceiver(e) 28 go func() { 29 for recv.Receive() { 30 frame := recv.Frame() 31 fmt.Println("received ", frame.String()) 32 } 33 }() 34 conn, err := socketcan.DialContext(context.Background(), e.Addr().Network(), e.Addr().String()) 35 if err != nil { 36 panic(err) 37 } 38 go func() { 39 tx := socketcan.NewTransmitter(conn) 40 id := 1 41 for { 42 time.Sleep(1 * time.Second) 43 txFrame := can.Frame{ID: uint32(id), Length: 4, Data: can.Data{1, 2, 3, 4}} 44 fmt.Printf("Transmitting %d\n", id) 45 err = tx.TransmitFrame(context.Background(), txFrame) 46 if err != nil { 47 fmt.Println(err) 48 time.Sleep(10 * time.Second) 49 } 50 id++ 51 } 52 }() 53 sigint := make(chan os.Signal, 1) 54 signal.Notify(sigint, syscall.SIGTERM) 55 <-sigint 56 cancel() 57 } 58 59 func getReceiver(e *socketcan.Emulator) *socketcan.Receiver { 60 conn, err := socketcan.DialContext(context.Background(), e.Addr().Network(), e.Addr().String()) 61 if err != nil { 62 panic(err) 63 } 64 fmt.Println("connected") 65 recv := socketcan.NewReceiver(conn) 66 //recv, err := e.Receiver() 67 if err != nil { 68 panic(err) 69 } 70 return recv 71 }