* dirPath: the path of app or shared library entry point logLevel: 0: silent, 1: error, 2: info, 3: debug, 4: verbose */ UDP server never actively sends first packet outwards. It only reacts to received packet then sends response.
(dirPath string, logLevel int)
| 164 | */ |
| 165 | // UDP server never actively sends first packet outwards. It only reacts to received packet then sends response. |
| 166 | func (s *UdpServer) Start(dirPath string, logLevel int) (err error) { |
| 167 | plugins.ExeDirPath = dirPath |
| 168 | ExeDirPath = dirPath |
| 169 | |
| 170 | // init logger |
| 171 | s.log = log.NewLogger("NHP-Server", logLevel, filepath.Join(ExeDirPath, "logs"), "server") |
| 172 | log.SetGlobalLogger(s.log) |
| 173 | |
| 174 | log.Info("=========================================================") |
| 175 | log.Info("=== NHP-Server %s started ===", version.Version) |
| 176 | log.Info("=== REVISION %s ===", version.CommitId) |
| 177 | log.Info("=== RELEASE %s ===", version.BuildTime) |
| 178 | log.Info("=========================================================") |
| 179 | |
| 180 | // load remote config,init etcd client |
| 181 | err = s.initRemoteConn() |
| 182 | if err == nil && s.etcdConn == nil { |
| 183 | // init config |
| 184 | err = s.loadBaseConfig() |
| 185 | } else { |
| 186 | // nhp server base config must be loaded first. |
| 187 | err = s.loadRemoteBaseConfig() |
| 188 | } |
| 189 | if err != nil { |
| 190 | return err |
| 191 | } |
| 192 | |
| 193 | var netIP net.IP |
| 194 | if len(s.config.ListenIp) > 0 { |
| 195 | netIP = net.ParseIP(s.config.ListenIp) |
| 196 | if netIP == nil { |
| 197 | log.Error("udp listen ip address is incorrect!") |
| 198 | return fmt.Errorf("udp listen ip address is incorrect") |
| 199 | } |
| 200 | } else { |
| 201 | netIP = net.IPv4zero // will both listen on ipv4 0.0.0.0:port and ipv6 [::]:port |
| 202 | } |
| 203 | |
| 204 | s.listenConn, err = net.ListenUDP("udp", &net.UDPAddr{ |
| 205 | IP: netIP, |
| 206 | Port: s.config.ListenPort, |
| 207 | }) |
| 208 | if err != nil { |
| 209 | log.Error("listen error: %v", err) |
| 210 | return fmt.Errorf("listen error %v", err) |
| 211 | } |
| 212 | |
| 213 | // retrieve local port |
| 214 | laddr := s.listenConn.LocalAddr() |
| 215 | s.listenAddr, err = net.ResolveUDPAddr(laddr.Network(), laddr.String()) |
| 216 | if err != nil { |
| 217 | log.Error("resolve local UDPAddr error: %v", err) |
| 218 | return fmt.Errorf("resolve UDPAddr error %v", err) |
| 219 | } |
| 220 | |
| 221 | prk, err := base64.StdEncoding.DecodeString(s.config.PrivateKeyBase64) |
| 222 | if err != nil { |
| 223 | log.Error("private key parse error: %v", err) |
no test coverage detected