Я моддинг игры (Портал 2). Я хочу добавить функцию обратного отсчета, чтобы начать гонку.
Используя библиотеку SFML, я посылаю time_since_epoch
из system_clock
на локальный компьютер и удаленный через сокеты. Как только он получен, я сравниваю полученный time_since_epoch и тот, который задан функцией now()
.
, чтобы я мог получить время, затраченное сокетом для отправки сообщения, которое должно быть текущимping (~ 4 мс).
Отлично работает на том же компьютере, на котором работает сервер. Тем не менее, это дает мне очень большое число на отдаленном. Вот мой код:
На стороне сервера:
void NetworkManager::StartCountdown()
{
sf::Uint64 epoch = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()).time_since_epoch().count();
sf::Packet countdown_packet;
countdown_packet << HEADER::COUNTDOWN << epoch;
for (auto& socket : this->socket_pool) {
socket->send(countdown_packet);
}
}
На стороне клиента:
void NetworkGhostPlayer::Countdown(sf::Uint64 epoch)
{
//std::this_thread::sleep_for(std::chrono::milliseconds(4));
auto now = std::chrono::system_clock::now();
auto diff = std::chrono::time_point_cast<std::chrono::milliseconds>(now).time_since_epoch().count() - epoch;
console->Print("%lld\n", diff);
}
Countdown()
isвызывается после получения пакета и информации в нем. console->Print()
- это функция Portal 2 для печати в игровой консоли. Портал 2 выполняет клиентскую часть.
На локальном компьютере консоль печатает 0
. Но на дальнем он дает числа от 300
до 1000
. Я, хотя это было связано с пингом, который имеет ~ 4 мс, но я проверил на локальном компьютере со строкой std::this_thread::sleep_for(std::chrono::milliseconds(4));
, и вывод был 4
, как ожидалось.
Я не понимаюв чем проблема. Если я запускаю сервер на другом компьютере, то новый локальный игровой экземпляр выдаст 0, а новый удаленный - большое число.
Оба компьютера работают в Windows. Вот полный код плагина: https://github.com/Blenderiste09/SourceAutoRecord/blob/Network-ghosts/GhostServer/NetworkManager.cpp
и
https://github.com/Blenderiste09/SourceAutoRecord/blob/Network-ghosts/src/Features/Demo/NetworkGhostPlayer.cpp
Большое спасибо за вашу помощь!
Blenderiste09