@@ -28,24 +28,67 @@ func init_v_mouse_controller(
2828 map_switch_signal chan bool ,
2929 addr net.UDPAddr ,
3030) * v_mouse_controller {
31- udp_ch := make (chan []byte )
31+ udp_write_ch := make (chan []byte )
3232 go (func () {
33- socket , err := net .DialUDP ("udp" , nil , & addr )
33+ // socket, err := net.DialUDP("udp", nil, &addr)
34+ localAddr , err := net .ResolveUDPAddr ("udp" , ":0" ) // 使用随机本地端口
35+ if err != nil {
36+ logger .Errorf ("解析本地地址失败: %s" , err .Error ())
37+ os .Exit (3 )
38+ }
39+ socket , err := net .ListenUDP ("udp" , localAddr )
40+ if err != nil {
41+ logger .Errorf ("udp error : %v" , err )
42+ return
43+ }
3444 if err != nil {
3545 logger .Errorf ("连接v_mouse失败 : %s" , err .Error ())
3646 os .Exit (3 )
3747 }
3848 defer socket .Close ()
49+ localAddrReal := socket .LocalAddr ().(* net.UDPAddr )
50+ logger .Infof ("v_mouse服务启动在端口: %d" , localAddrReal .Port )
51+
52+ // 启动读取goroutine
53+ udpRecvCh := make (chan []byte , 100 ) // 缓冲大小可以根据需要调整
54+ go func () {
55+ readBuffer := make ([]byte , 32 )
56+ for {
57+ select {
58+ case <- global_close_signal :
59+ close (udpRecvCh ) // 关闭管道
60+ return
61+ default :
62+ n , remoteAddr , err := socket .ReadFromUDP (readBuffer )
63+ if err != nil {
64+ if netErr , ok := err .(net.Error ); ok && netErr .Timeout () {
65+ continue
66+ }
67+ logger .Errorf ("读取UDP数据失败: %s" , err .Error ())
68+ continue
69+ }
70+ if n > 0 {
71+ data := make ([]byte , n )
72+ copy (data , readBuffer [:n ])
73+ global_device_orientation = int32 (data [0 ])
74+ logger .Infof ("从 %s 接收到 vpoint上报屏幕方向 %d " , remoteAddr .String (), int32 (data [0 ]))
75+
76+ }
77+ }
78+ }
79+ }()
80+
3981 for {
4082 select {
4183 case <- global_close_signal :
4284 return
4385 default :
44- data := <- udp_ch
45- socket .Write (data )
86+ data := <- udp_write_ch
87+ socket .WriteToUDP (data , & addr )
4688 }
4789 }
4890 })()
91+
4992 screen_x , screen_y := int32 (0 ), int32 (0 )
5093 if global_is_wordking_remote {
5194 screen_x = global_screen_x
@@ -62,7 +105,7 @@ func init_v_mouse_controller(
62105 left_downing : false ,
63106 mouse_x : 0 ,
64107 mouse_y : 0 ,
65- udp_write_ch : udp_ch ,
108+ udp_write_ch : udp_write_ch ,
66109 mouse_id : - 1 ,
67110 screen_x : screen_x ,
68111 screen_y : screen_y ,
0 commit comments