rts-sim-testing-service/dynamics/example/main.go

102 lines
2.6 KiB
Go
Raw Normal View History

package main
import (
"encoding/hex"
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"github.com/panjf2000/gnet/v2"
"joylink.club/bj-rtsts-server/config"
"joylink.club/bj-rtsts-server/dynamics"
"log"
"net"
"strconv"
"time"
)
// 这里用来测试通信与数据传输是否正常
func main() {
loadAndChangeConfig()
//注册列车信息处理逻辑
dynamics.RegisterTrainInfoHandler(&ExampleTrainInfoHandler{})
//启动udp服务
go dynamics.RunUdpServer()
////启动仅用于的测试的模拟远程udp服务
go runTestUdpServer()
////启动http服务
go runTestHttpServer()
time.Sleep(2 * time.Second)
//向本地udp服务发送数据
sendDataToLocalUdpServer()
//向远程udp服务发送数据
_ = dynamics.SendTurnoutInfo(&dynamics.TurnoutInfo{Code: 02})
//发送http请求
_, _, _ = dynamics.SendTrainInitReq(&dynamics.InitTrainInfo{Speed: 10})
}
func loadAndChangeConfig() {
config.LoadConfig()
config.Config.Dynamics.Ip = "127.0.0.1"
config.Config.Dynamics.HttpPort = 3500
}
func sendDataToLocalUdpServer() {
addr, _ := net.ResolveUDPAddr("udp", "127.0.0.1:"+strconv.Itoa(config.Config.Dynamics.UdpLocalPort))
conn, _ := net.DialUDP("udp", nil, addr)
buf, _ := hex.DecodeString("0009012EE009000000070380000006000100020003000A000A000A000A000A000A000A")
conn.Write(buf)
conn.Close()
}
func runTestHttpServer() {
engine := gin.Default()
engine.POST("/api/aerodynamics/init/train", func(context *gin.Context) {
info := dynamics.InitTrainInfo{}
err := context.ShouldBindJSON(&info)
if err != nil {
println(err.Error())
}
data, err := json.MarshalIndent(info, "", " ")
fmt.Println("---------------- 接收到的列车初始化信息 ----------------")
fmt.Println(string(data))
if info.Speed != 10 {
println("http服务接收到的数据异常")
}
})
engine.Run(fmt.Sprintf(":%d", config.Config.Dynamics.HttpPort))
}
func runTestUdpServer() {
server := &testUdpServer{addr: fmt.Sprintf("udp://:%d", config.Config.Dynamics.UdpRemotePort), multicore: false}
log.Fatal(gnet.Run(server, server.addr, gnet.WithMulticore(server.multicore)))
}
type testUdpServer struct {
gnet.BuiltinEventEngine
eng gnet.Engine
addr string
multicore bool
eventHandlers []gnet.EventHandler
}
func (server *testUdpServer) OnTraffic(c gnet.Conn) gnet.Action {
buf, err := c.Next(-1)
if err != nil {
println(err.Error())
}
fmt.Println("---------------- 远程udp服务接收到的字节数据 ----------------")
fmt.Println(buf)
return gnet.None
}
type ExampleTrainInfoHandler struct {
}
func (handler *ExampleTrainInfoHandler) HandleTrainInfo(info dynamics.TrainInfo) {
fmt.Println("处理列车信息...")
fmt.Println(info)
}