123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package main
- import (
- "fmt"
- "net"
- "os"
- "strconv"
- "time"
- "github.com/aceld/zinx/ziface"
- "github.com/aceld/zinx/znet"
- )
- // 模拟渲染状态的枚举
- const (
- NativeRenderInit = "NativeRender Init"
- NativeRenderReady = "NativeRender Ready"
- NativeRenderError = "NativeRender Error"
- NativeRenderQuited = "NativeRender Quited"
- )
- var currentState = NativeRenderInit
- // WebSocket 连接的路由处理
- type WebSocketRouter struct {
- znet.BaseRouter
- }
- func (r *WebSocketRouter) Handle(request ziface.IRequest) {
- message := string(request.GetData())
- fmt.Println("Received message from server:", message)
- // 根据收到的消息决定是否退出
- if message == "exit" {
- currentState = NativeRenderQuited
- fmt.Println("Exiting and setting state to:", currentState)
- os.Exit(0)
- }
- }
- // 模拟状态变化
- func simulateRenderState(roomID int, wsUrl string) {
- fmt.Printf("Connecting to WebSocket URL: %s with room ID: %d\n", wsUrl, roomID)
- // 初始化状态
- currentState = NativeRenderInit
- fmt.Println("Current State:", currentState)
- time.Sleep(2 * time.Second)
- // 模拟进入 Ready 状态
- currentState = NativeRenderReady
- fmt.Println("Current State:", currentState)
- time.Sleep(2 * time.Second)
- // 模拟错误状态
- // currentState = NativeRenderError
- // fmt.Println("Current State:", currentState)
- select {}
- }
- // 启动 Zinx WebSocket 客户端
- func startWebSocketClient(wsUrl string) {
- // 使用 net.SplitHostPort 分离 IP 和端口
- ip, _port, err := net.SplitHostPort(wsUrl)
- if err != nil {
- fmt.Println("Error:", err)
- return
- }
- port, _ := strconv.Atoi(_port)
- client := znet.NewWsClient(ip, port)
- client.SetOnConnStart(func(conn ziface.IConnection) {
- fmt.Println("WebSocket connected")
- })
- client.SetOnConnStop(func(conn ziface.IConnection) {
- fmt.Println("WebSocket disconnected")
- })
- client.AddRouter(1, &WebSocketRouter{})
- client.Start()
- select {} // 保持连接,等待退出消息
- }
- func Run(option *AppOption) {
- // 模拟渲染状态的变化
- go simulateRenderState(option.RoomId, option.Uri)
- // 启动 WebSocket 客户端
- startWebSocketClient(option.Uri)
- }
|