Exemple #1
0
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)
	}
}