Bonjour à tous,
J'ai récemment trouvé cet article https://nickstips.wordpress.com/2010/02 ... rnet-time/
Je voudrais savoir si d'après vous il y aurais moyen d’adapter quelque chose de similaire pour unity, et si oui comment.
J'avoue ne pas comprendre grand chose au script, donc je ne comprends pas vraiment les erreurs qu'il me sort.
Merci d'avance
Je précise que nous avons déja testé la fonction utc native mais nous avons observés un écart trop important entre les heures envoyées par nos pc test, d'où l'intérêt de passer par un serveur tiers
[DB-RS] Récupération heure NIST par Script en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :
Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé
Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie
Exemple :
[DB-RS] Mouvement perso multijoueur
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :
Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé
Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie
Exemple :
[DB-RS] Mouvement perso multijoueur
Re: [DB-RS] Récupération heure NIST par Script en C#
C'est un code en C#, donc tu peux l'utiliser tel quel dans Unity.
Quelles sont les erreurs ?
Quelles sont les erreurs ?
Re: [DB-RS] Récupération heure NIST par Script en C#
Voici deux screens des erreurs que j'obtiens
Re: [DB-RS] Récupération heure NIST par Script en C#
Bon, je pense que tes message d'erreur, ce sont juste les namespaces qui manquent en tout début de script.
J'ai l'ai testé (unity linux) et ça freeze unity lors de la connexion, j'ai pas capté pourquoi... Mais j'ai trouvé d'autres exemples qui font la même chose ici https://stackoverflow.com/questions/119 ... er-using-c
Et j'ai repris l'un des exemples pour faire ça :
Il y a un autre exemple qui tourne en asynchrone sur la page que je t'ai envoyée. Je pense que pour ce genre de chose ça serait pas mal de ne pas bloquer le thread principal, donc à creuser...
J'ai l'ai testé (unity linux) et ça freeze unity lors de la connexion, j'ai pas capté pourquoi... Mais j'ai trouvé d'autres exemples qui font la même chose ici https://stackoverflow.com/questions/119 ... er-using-c
Et j'ai repris l'un des exemples pour faire ça :
Code : Tout sélectionner
using System;
using UnityEngine;
using System.Net;
using System.Net.Sockets;
public class NIST : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Debug.Log(GetNetworkTime(true));
}
public static DateTime GetNetworkTime(bool toLocalTime)
{
const string ntpServer = "pool.ntp.org";
var ntpData = new byte[48];
ntpData[0] = 0x1B; //LeapIndicator = 0 (no warning), VersionNum = 3 (IPv4 only), Mode = 3 (Client Mode)
var addresses = Dns.GetHostEntry(ntpServer).AddressList;
var ipEndPoint = new IPEndPoint(addresses[0], 123);
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
{
ReceiveTimeout = 3000
};
socket.Connect(ipEndPoint);
socket.Send(ntpData);
socket.Receive(ntpData);
socket.Close();
ulong intPart = (ulong)ntpData[40] << 24 | (ulong)ntpData[41] << 16 | (ulong)ntpData[42] << 8 | (ulong)ntpData[43];
ulong fractPart = (ulong)ntpData[44] << 24 | (ulong)ntpData[45] << 16 | (ulong)ntpData[46] << 8 | (ulong)ntpData[47];
var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
var networkDateTime = (new DateTime(1900, 1, 1)).AddMilliseconds((long)milliseconds);
if (toLocalTime)
{
return networkDateTime.ToLocalTime();
}
else
{
return networkDateTime;
}
}
}