mirror of
https://github.com/BeamMP/BeamMP-Launcher.git
synced 2025-07-02 07:56:26 +00:00
ping fix, fixed data timeout
This commit is contained in:
parent
66373ae44c
commit
4d42289b1d
@ -16,6 +16,7 @@ std::string HTTP_REQUEST(const std::string&url,int port);
|
|||||||
void SyncResources(const std::string& IP, int port);
|
void SyncResources(const std::string& IP, int port);
|
||||||
extern std::string UlStatus;
|
extern std::string UlStatus;
|
||||||
extern std::string MStatus;
|
extern std::string MStatus;
|
||||||
|
extern int ping;
|
||||||
void StartSync(const std::string &Data){
|
void StartSync(const std::string &Data){
|
||||||
std::thread t1(SyncResources,Data.substr(1,Data.find(':')-1),std::stoi(Data.substr(Data.find(':')+1)));
|
std::thread t1(SyncResources,Data.substr(1,Data.find(':')-1),std::stoi(Data.substr(Data.find(':')+1)));
|
||||||
t1.detach();
|
t1.detach();
|
||||||
@ -24,8 +25,8 @@ void StartSync(const std::string &Data){
|
|||||||
std::string Parse(const std::string& Data){
|
std::string Parse(const std::string& Data){
|
||||||
char Code = Data.substr(0,1).at(0), SubCode = 0;
|
char Code = Data.substr(0,1).at(0), SubCode = 0;
|
||||||
if(Data.length() > 1)SubCode = Data.substr(1,1).at(0);
|
if(Data.length() > 1)SubCode = Data.substr(1,1).at(0);
|
||||||
std::cout << "Code : " << Code << std::endl;
|
////std::cout << "Code : " << Code << std::endl;
|
||||||
std::cout << "Data : " << Data.substr(1) << std::endl;
|
////std::cout << "Data : " << Data.substr(1) << std::endl;
|
||||||
switch (Code){
|
switch (Code){
|
||||||
case 'A':
|
case 'A':
|
||||||
return Data.substr(0,1);
|
return Data.substr(0,1);
|
||||||
@ -35,9 +36,9 @@ std::string Parse(const std::string& Data){
|
|||||||
StartSync(Data);
|
StartSync(Data);
|
||||||
return "";
|
return "";
|
||||||
case 'U':
|
case 'U':
|
||||||
if(SubCode == 'l'){
|
if(SubCode == 'l')return UlStatus;
|
||||||
return UlStatus;
|
if(SubCode == 'p')return "Up" + std::to_string(ping);
|
||||||
}
|
if(!SubCode)return UlStatus+ "\n" + "Up" + std::to_string(ping);
|
||||||
case 'M':
|
case 'M':
|
||||||
return MStatus;
|
return MStatus;
|
||||||
default:
|
default:
|
||||||
@ -125,7 +126,7 @@ void CoreNetworkThread(){
|
|||||||
else if (iResult == 0)
|
else if (iResult == 0)
|
||||||
std::cout << "Connection closing...\n";
|
std::cout << "Connection closing...\n";
|
||||||
else {
|
else {
|
||||||
std::cout << "recv failed with error: " << WSAGetLastError() << std::endl;
|
std::cout << "(Core Network) recv failed with error: " << WSAGetLastError() << std::endl;
|
||||||
closesocket(ClientSocket);
|
closesocket(ClientSocket);
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
}
|
}
|
||||||
@ -136,7 +137,7 @@ void CoreNetworkThread(){
|
|||||||
closesocket(ClientSocket);
|
closesocket(ClientSocket);
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
}else{
|
}else{
|
||||||
std::cout << "Bytes sent: " << iSendResult << std::endl;
|
///std::cout << "Bytes sent: " << iSendResult << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (iResult > 0);
|
} while (iResult > 0);
|
||||||
|
@ -134,7 +134,7 @@ void SyncResources(const std::string&IP,int Port){
|
|||||||
else if (iResult == 0)
|
else if (iResult == 0)
|
||||||
printf("Connection closing...\n");
|
printf("Connection closing...\n");
|
||||||
else {
|
else {
|
||||||
printf("recv failed with error: %d\n", WSAGetLastError());
|
printf("(Resources) recv failed with error: %d\n", WSAGetLastError());
|
||||||
closesocket(SendingSocket);
|
closesocket(SendingSocket);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -159,5 +159,5 @@ void SyncResources(const std::string&IP,int Port){
|
|||||||
|
|
||||||
UlStatus = "Uldone";
|
UlStatus = "Uldone";
|
||||||
std::cout << "Done!" << std::endl;
|
std::cout << "Done!" << std::endl;
|
||||||
//ProxyThread(IP,Port);
|
ProxyThread(IP,Port);
|
||||||
}
|
}
|
@ -92,6 +92,7 @@
|
|||||||
#include <WinSock2.h>
|
#include <WinSock2.h>
|
||||||
#include <WS2tcpip.h>
|
#include <WS2tcpip.h>
|
||||||
#include <mmsystem.h>
|
#include <mmsystem.h>
|
||||||
|
|
||||||
#include <intrin.h>
|
#include <intrin.h>
|
||||||
|
|
||||||
#if defined(_WIN32) && defined(_MSC_VER)
|
#if defined(_WIN32) && defined(_MSC_VER)
|
||||||
@ -589,7 +590,7 @@ extern "C" {
|
|||||||
ENET_HOST_DEFAULT_MAXIMUM_PACKET_SIZE = 32 * 1024 * 1024,
|
ENET_HOST_DEFAULT_MAXIMUM_PACKET_SIZE = 32 * 1024 * 1024,
|
||||||
ENET_HOST_DEFAULT_MAXIMUM_WAITING_DATA = 32 * 1024 * 1024,
|
ENET_HOST_DEFAULT_MAXIMUM_WAITING_DATA = 32 * 1024 * 1024,
|
||||||
|
|
||||||
ENET_PEER_DEFAULT_ROUND_TRIP_TIME = 500,
|
ENET_PEER_DEFAULT_ROUND_TRIP_TIME = 100,
|
||||||
ENET_PEER_DEFAULT_PACKET_THROTTLE = 32,
|
ENET_PEER_DEFAULT_PACKET_THROTTLE = 32,
|
||||||
ENET_PEER_PACKET_THROTTLE_SCALE = 32,
|
ENET_PEER_PACKET_THROTTLE_SCALE = 32,
|
||||||
ENET_PEER_PACKET_THROTTLE_COUNTER = 7,
|
ENET_PEER_PACKET_THROTTLE_COUNTER = 7,
|
||||||
@ -675,6 +676,7 @@ extern "C" {
|
|||||||
enet_uint32 lastRoundTripTimeVariance;
|
enet_uint32 lastRoundTripTimeVariance;
|
||||||
enet_uint32 highestRoundTripTimeVariance;
|
enet_uint32 highestRoundTripTimeVariance;
|
||||||
enet_uint32 roundTripTime; /**< mean round trip time (RTT), in milliseconds, between sending a reliable packet and receiving its acknowledgement */
|
enet_uint32 roundTripTime; /**< mean round trip time (RTT), in milliseconds, between sending a reliable packet and receiving its acknowledgement */
|
||||||
|
enet_uint32 ping;
|
||||||
enet_uint32 roundTripTimeVariance;
|
enet_uint32 roundTripTimeVariance;
|
||||||
enet_uint32 mtu;
|
enet_uint32 mtu;
|
||||||
enet_uint32 windowSize;
|
enet_uint32 windowSize;
|
||||||
@ -920,6 +922,7 @@ extern "C" {
|
|||||||
ENET_API enet_uint32 enet_peer_get_ip(ENetPeer *, char * ip, size_t ipLength);
|
ENET_API enet_uint32 enet_peer_get_ip(ENetPeer *, char * ip, size_t ipLength);
|
||||||
ENET_API enet_uint16 enet_peer_get_port(ENetPeer *);
|
ENET_API enet_uint16 enet_peer_get_port(ENetPeer *);
|
||||||
ENET_API enet_uint32 enet_peer_get_rtt(ENetPeer *);
|
ENET_API enet_uint32 enet_peer_get_rtt(ENetPeer *);
|
||||||
|
ENET_API enet_uint32 enet_peer_get_ping(ENetPeer *);
|
||||||
ENET_API enet_uint64 enet_peer_get_packets_sent(ENetPeer *);
|
ENET_API enet_uint64 enet_peer_get_packets_sent(ENetPeer *);
|
||||||
ENET_API enet_uint32 enet_peer_get_packets_lost(ENetPeer *);
|
ENET_API enet_uint32 enet_peer_get_packets_lost(ENetPeer *);
|
||||||
ENET_API enet_uint64 enet_peer_get_bytes_sent(ENetPeer *);
|
ENET_API enet_uint64 enet_peer_get_bytes_sent(ENetPeer *);
|
||||||
@ -2238,7 +2241,6 @@ extern "C" {
|
|||||||
if (peer->state == ENET_PEER_STATE_DISCONNECTED || peer->state == ENET_PEER_STATE_ZOMBIE) {
|
if (peer->state == ENET_PEER_STATE_DISCONNECTED || peer->state == ENET_PEER_STATE_ZOMBIE) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
receivedSentTime = ENET_NET_TO_HOST_16(command->acknowledge.receivedSentTime);
|
receivedSentTime = ENET_NET_TO_HOST_16(command->acknowledge.receivedSentTime);
|
||||||
receivedSentTime |= host->serviceTime & 0xFFFF0000;
|
receivedSentTime |= host->serviceTime & 0xFFFF0000;
|
||||||
if ((receivedSentTime & 0x8000) > (host->serviceTime & 0x8000)) {
|
if ((receivedSentTime & 0x8000) > (host->serviceTime & 0x8000)) {
|
||||||
@ -2256,6 +2258,8 @@ extern "C" {
|
|||||||
enet_peer_throttle(peer, roundTripTime);
|
enet_peer_throttle(peer, roundTripTime);
|
||||||
peer->roundTripTimeVariance -= peer->roundTripTimeVariance / 4;
|
peer->roundTripTimeVariance -= peer->roundTripTimeVariance / 4;
|
||||||
|
|
||||||
|
peer->ping = roundTripTime;
|
||||||
|
|
||||||
if (roundTripTime >= peer->roundTripTime) {
|
if (roundTripTime >= peer->roundTripTime) {
|
||||||
peer->roundTripTime += (roundTripTime - peer->roundTripTime) / 8;
|
peer->roundTripTime += (roundTripTime - peer->roundTripTime) / 8;
|
||||||
peer->roundTripTimeVariance += (roundTripTime - peer->roundTripTime) / 4;
|
peer->roundTripTimeVariance += (roundTripTime - peer->roundTripTime) / 4;
|
||||||
@ -3416,6 +3420,10 @@ extern "C" {
|
|||||||
return peer->state;
|
return peer->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enet_uint32 enet_peer_get_ping(ENetPeer *peer) {
|
||||||
|
return peer->ping;
|
||||||
|
}
|
||||||
|
|
||||||
enet_uint32 enet_peer_get_rtt(ENetPeer *peer) {
|
enet_uint32 enet_peer_get_rtt(ENetPeer *peer) {
|
||||||
return peer->roundTripTime;
|
return peer->roundTripTime;
|
||||||
}
|
}
|
||||||
@ -3740,6 +3748,7 @@ extern "C" {
|
|||||||
peer->timeoutMinimum = ENET_PEER_TIMEOUT_MINIMUM;
|
peer->timeoutMinimum = ENET_PEER_TIMEOUT_MINIMUM;
|
||||||
peer->timeoutMaximum = ENET_PEER_TIMEOUT_MAXIMUM;
|
peer->timeoutMaximum = ENET_PEER_TIMEOUT_MAXIMUM;
|
||||||
peer->lastRoundTripTime = ENET_PEER_DEFAULT_ROUND_TRIP_TIME;
|
peer->lastRoundTripTime = ENET_PEER_DEFAULT_ROUND_TRIP_TIME;
|
||||||
|
peer->ping = 0;
|
||||||
peer->lowestRoundTripTime = ENET_PEER_DEFAULT_ROUND_TRIP_TIME;
|
peer->lowestRoundTripTime = ENET_PEER_DEFAULT_ROUND_TRIP_TIME;
|
||||||
peer->lastRoundTripTimeVariance = 0;
|
peer->lastRoundTripTimeVariance = 0;
|
||||||
peer->highestRoundTripTimeVariance = 0;
|
peer->highestRoundTripTimeVariance = 0;
|
||||||
|
2
main.cpp
2
main.cpp
@ -79,7 +79,7 @@ std::string CheckVer(const std::string &path){
|
|||||||
void SyncResources(const std::string&IP,int Port);
|
void SyncResources(const std::string&IP,int Port);
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
std::string ver = "0.31", Path = CheckDir(argv[0],ver),HTTP_Result;
|
std::string ver = "0.36", Path = CheckDir(argv[0],ver),HTTP_Result;
|
||||||
CheckForUpdates(ver); //Update Check
|
CheckForUpdates(ver); //Update Check
|
||||||
|
|
||||||
//Security
|
//Security
|
||||||
|
20
proxy.cpp
20
proxy.cpp
@ -5,9 +5,10 @@
|
|||||||
#define ENET_IMPLEMENTATION
|
#define ENET_IMPLEMENTATION
|
||||||
#include "include/enet.h"
|
#include "include/enet.h"
|
||||||
#include <WinSock2.h>
|
#include <WinSock2.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <chrono>
|
||||||
#include <WS2tcpip.h>
|
#include <WS2tcpip.h>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <iostream>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
@ -23,10 +24,9 @@ std::queue<std::string> RUDPData;
|
|||||||
std::queue<std::string> RUDPToSend;
|
std::queue<std::string> RUDPToSend;
|
||||||
bool Terminate = false;
|
bool Terminate = false;
|
||||||
|
|
||||||
|
int ping = 0;
|
||||||
void CoreNetworkThread();
|
void CoreNetworkThread();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#pragma clang diagnostic pop
|
#pragma clang diagnostic pop
|
||||||
#pragma clang diagnostic pop
|
#pragma clang diagnostic pop
|
||||||
void HandleEvent(ENetEvent event,Client client){
|
void HandleEvent(ENetEvent event,Client client){
|
||||||
@ -85,10 +85,19 @@ void RUDPClientThread(const std::string& IP, int Port){
|
|||||||
RUDPToSend.front().size()+1,
|
RUDPToSend.front().size()+1,
|
||||||
ENET_PACKET_FLAG_RELIABLE); //Create A reliable packet using the data
|
ENET_PACKET_FLAG_RELIABLE); //Create A reliable packet using the data
|
||||||
enet_peer_send(client.peer, 0, packet);
|
enet_peer_send(client.peer, 0, packet);
|
||||||
|
ping = client.peer->ping;
|
||||||
|
|
||||||
std::cout << "sending : " << RUDPToSend.front() << std::endl;
|
std::cout << "sending : " << RUDPToSend.front() << std::endl;
|
||||||
RUDPToSend.pop();
|
RUDPToSend.pop();
|
||||||
}
|
}
|
||||||
Sleep(10);
|
|
||||||
|
auto start = std::chrono::high_resolution_clock::now();
|
||||||
|
int Interval = 0;
|
||||||
|
while(Interval < 200 && RUDPToSend.empty()){
|
||||||
|
auto done = std::chrono::high_resolution_clock::now();
|
||||||
|
Interval = std::chrono::duration_cast<std::chrono::milliseconds>(done-start).count();
|
||||||
|
ping = client.peer->ping;
|
||||||
|
}
|
||||||
} while (!Terminate);
|
} while (!Terminate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,6 +105,7 @@ void RUDPClientThread(const std::string& IP, int Port){
|
|||||||
#pragma clang diagnostic ignored "-Wmissing-noreturn"
|
#pragma clang diagnostic ignored "-Wmissing-noreturn"
|
||||||
void TCPServerThread(const std::string& IP, int Port){
|
void TCPServerThread(const std::string& IP, int Port){
|
||||||
Terminate = false;
|
Terminate = false;
|
||||||
|
std::cout << "Proxy Started!" << std::endl;
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
int iResult;
|
int iResult;
|
||||||
SOCKET ListenSocket = INVALID_SOCKET;
|
SOCKET ListenSocket = INVALID_SOCKET;
|
||||||
@ -190,7 +200,7 @@ void TCPServerThread(const std::string& IP, int Port){
|
|||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
std::cout << "recv failed with error: " << WSAGetLastError() << std::endl;
|
std::cout << "(Proxy) recv failed with error: " << WSAGetLastError() << std::endl;
|
||||||
closesocket(ClientSocket);
|
closesocket(ClientSocket);
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user