func handleUDPConn(udpListener net.UDPConn, clientUDPAddr *net.UDPAddr, fserverRCPIpPort string, nonceMap clientServerUtils.ConcurrentMap, secret int64, msgFromClient []byte) { nonceMap.RLock() clientNonce := nonceMap.Map[clientUDPAddr.String()] nonceMap.RUnlock() var receivedHashMsg clientServerUtils.HashMessage err := json.Unmarshal(msgFromClient, &receivedHashMsg) if err != nil { sendNewNonce(udpListener, clientUDPAddr, nonceMap) } else if clientNonce == 0 { errMsg := clientServerUtils.ErrMessage{"unknown remote client address"} sendErrMessage(udpListener, clientUDPAddr, errMsg) } else if isValidHashMessage(receivedHashMsg, clientNonce, secret) { replyWithFortuneInfoMessage(udpListener, clientUDPAddr, fserverRCPIpPort) } else { errMsg := clientServerUtils.ErrMessage{"unexpected hash value"} sendErrMessage(udpListener, clientUDPAddr, errMsg) } }