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  }