Browse Source

修改bug

yjp 1 year ago
parent
commit
f142fda2ba
1 changed files with 15 additions and 8 deletions
  1. 15 8
      network/udp_server.go

+ 15 - 8
network/udp_server.go

@@ -1,6 +1,7 @@
 package network
 
 import (
+	"errors"
 	"fmt"
 	"net"
 	"time"
@@ -10,14 +11,15 @@ const (
 	udpServerReceiveBufferSize = 1024
 )
 
+var UDPServerIgnoreResponse = errors.New("忽略响应")
+
 // UDPServerRequestCallback 请求回调
 // 参数:
 // data: 请求数据
 // 返回值:
-// send: 是否发送响应
 // responseBytes: 响应数据包
-// err: 是否存在错误
-type UDPServerRequestCallback func(data []byte) (send bool, responseBytes []byte, err error)
+// err: 是否存在错误,如果是UDPServerIgnoreResponse,则忽略,不进行响应
+type UDPServerRequestCallback func(data []byte) (responseBytes []byte, err error)
 
 type UDPServerOption func(opt *UDPServerOptions)
 
@@ -146,21 +148,26 @@ func (server *UDPServer) dealRequest(data []byte, rAddr *net.UDPAddr, doneChan c
 		case <-doneChan:
 			return
 		default:
+			// 没有提供请求响应函数
 			if server.options.requestCallback == nil {
 				server.response(server.conn, rAddr, data)
 				return
 			}
 
-			send, responseBytes, err := server.options.requestCallback(data)
-			if !send {
-				return
-			}
-
+			// 交给上层回调处理,返回处理结果和响应数据
+			responseBytes, err := server.options.requestCallback(data)
 			if err != nil {
+				// 忽略响应
+				if errors.Is(err, UDPServerIgnoreResponse) {
+					return
+				}
+
 				server.response(server.conn, rAddr, []byte(err.Error()))
+				return
 			}
 
 			server.response(server.conn, rAddr, responseBytes)
+			return
 		}
 	}
 }