update network part

This commit is contained in:
AleaJactaEst 2020-04-19 00:36:11 +02:00
parent 0b2dee6019
commit b29218ffff
11 changed files with 92 additions and 24 deletions

View file

@ -21,7 +21,7 @@ var _networkconnection = NetworkConnection.new()
var _referentialmessage = ReferentialMessage.new()
func _ready():
pass
pass
#func send_system_login(host, port, user_addr, user_key, user_id, lang):
# _networkconnection.define_server(host, port)
@ -30,26 +30,31 @@ func _ready():
# _networkconnection.connect_to_server()
func send_system_quit():
_networkconnection.send_system_quit()
_networkconnection.send_system_quit()
func send_systemm_disconnect():
_networkconnection.send_systemm_disconnect()
_networkconnection.send_systemm_disconnect()
func disconnect_server():
_networkconnection.disconnect_server()
_networkconnection.disconnect_server()
func connect_to_server(host, port, user_addr, user_key, user_id, lang):
_networkconnection.define_server(host, port)
_networkconnection.define_user(user_addr, user_key, user_id)
_networkconnection.define_lang(lang)
_networkconnection.connect_to_server()
#send_system_login(host, port, user_addr, user_key, user_id, lang)
_networkconnection.define_server(host, port)
_networkconnection.define_user(user_addr, user_key, user_id)
_networkconnection.define_lang(lang)
_networkconnection.connect_to_server()
#send_system_login(host, port, user_addr, user_key, user_id, lang)
func _process(delta):
_networkconnection.process(delta)
_networkconnection.process(delta)
var data = _networkconnection.get_server_messages()
#print("******* data:", data.size(), data)
if data.size() > 0:
var ele = data.pop_front()
print("*** ele:" , ele)
func _exit_tree():
print("[net_low_level] End")
disconnect_server()
_networkconnection.terminate_network_connection()
_referentialmessage.clear_session()
print("[net_low_level] End")
disconnect_server()
_networkconnection.terminate_network_connection()
_referentialmessage.clear_session()

View file

@ -19,6 +19,8 @@
*/
#include "core/reference.h"
#include "core/array.h"
#include "core/dictionary.h"
#include "modules/debug/debug.h"
#include "modules/networkconnection/network_data.h"
#include "modules/networkconnection/state_connexion.h"
@ -26,11 +28,16 @@
#include "modules/referentialmessage/referentialmessage.h"
#include "modules/referentialmessage/referentialmessagecore.h"
void ActionFactory::decode_message(Ref<BitStream> msgin)
void ActionFactory::decode_message(NetworkData * data, Ref<BitStream> msgin)
{
Dictionary value;
ReferentialMessage ref_msg;
uint32_t id = ref_msg.read_command(msgin);
DBG_PRINT("Decode message:" + get_command_name(id));
value["command"] = id;
#ifdef DEBUG_ENABLED
value["command_debug"] = get_command_name(id);
#endif
switch(id)
{
case ReferentialMessageCore::Command::TARGET_PARTY:
@ -941,6 +948,11 @@ void ActionFactory::decode_message(Ref<BitStream> msgin)
{
uint32_t timestamp = msgin->get_uint32();
DBG_PRINT("Decode message:" + get_command_name(id) + " timestamp:" + itos(timestamp));
//param.push_back(timestamp);
value["timestamp"] = timestamp;
data->_server_messages.push_back(value);
break;
}
case ReferentialMessageCore::Command::GUILD_CREATE:
@ -1379,15 +1391,15 @@ void ActionFactory::decode_message(Ref<BitStream> msgin)
#ifdef DEBUG_ENABLED
// Check if we have read all data - only on debug mode
{
uint32_t data;
uint32_t last_data;
while ( msgin->number_bit_not_read() > 0 )
{
DBG_PRINT("Read : " + itos(msgin->number_bit_not_read()));
if ( msgin->number_bit_not_read() >= 8 )
data = msgin->get_uint8();
last_data = msgin->get_uint8();
else
data = msgin->get_serial(msgin->number_bit_not_read());
if ( data != 0 )
last_data = msgin->get_serial(msgin->number_bit_not_read());
if ( last_data != 0 )
{
ERR_PRINT("Missing some data - we dont' have translate all data : " + msgin->show());
break;
@ -1398,7 +1410,7 @@ void ActionFactory::decode_message(Ref<BitStream> msgin)
#endif
}
void ActionFactory::unpack(Ref<BitStream> msgin)
void ActionFactory::unpack(NetworkData * data, Ref<BitStream> msgin)
{
bool shortcode = msgin->get_bool();
uint8_t code;
@ -1441,7 +1453,7 @@ void ActionFactory::unpack(Ref<BitStream> msgin)
Ref<BitStream> tmp;
tmp.instance();
tmp->put_array_uint8(StreamByte);
decode_message(tmp);
decode_message(data, tmp);
tmp.unref();
break;
}
@ -1592,7 +1604,7 @@ void ActionFactory::decode(NetworkData * data, Ref<BitStream> msgin)
last_ack[channel] = data->_current_send_number;
}
num ++;
unpack(msgin);
unpack(data, msgin);
// read next packet
next = msgin->get_bool();

View file

@ -27,8 +27,8 @@
class ActionFactory
{
public:
void decode_message(Ref<BitStream> msgin);
void unpack(Ref<BitStream> msgin);
void decode_message(NetworkData * data, Ref<BitStream> msgin);
void unpack(NetworkData * data, Ref<BitStream> msgin);
void decode(NetworkData * data, Ref<BitStream> msgin);
};

View file

@ -31,6 +31,7 @@ void NetworkConnection::_bind_methods()
ClassDB::bind_method(D_METHOD("process", "delta"), &NetworkConnection::process);
ClassDB::bind_method(D_METHOD("get_state"), &NetworkConnection::get_state);
ClassDB::bind_method(D_METHOD("connect_to_server"), &NetworkConnection::connect_to_server);
ClassDB::bind_method(D_METHOD("get_server_messages"), &NetworkConnection::get_server_messages);
ClassDB::bind_method(D_METHOD("terminate_network_connection"), &NetworkConnection::terminate_network_connection);
//ClassDB::bind_method(D_METHOD("get_master_message_description_node"), &NetworkConnection::get_master_message_description_node);
}
@ -82,12 +83,19 @@ void NetworkConnection::process(int delta)
{
NetworkConnectionCore::get_singleton()->process(delta);
}
/*
MessageDescriptionNode & NetworkConnection::get_master_message_description_node()
{
return NetworkConnectionCore::get_singleton()->get_master_message_description_node();
}
*/
Variant NetworkConnection::get_server_messages()
{
return NetworkConnectionCore::get_singleton()->get_server_messages();
}
void NetworkConnection::terminate_network_connection()
{
NetworkConnectionCore::terminate_connexion();

View file

@ -44,6 +44,9 @@ public:
void disconnect_server();
void process(int delta);
int get_state();
Variant get_server_messages();
void terminate_network_connection();
//MessageDescriptionNode & get_master_message_description_node();

View file

@ -200,6 +200,11 @@ void NetworkConnectionCore::process(int delta)
this->_state_connexion->send_message();
}
Variant NetworkConnectionCore::get_server_messages()
{
return _network_data._server_messages;
}
bool NetworkConnectionCore::is_active()
{
DBG_PRINT("is_active ..");

View file

@ -23,6 +23,7 @@
#include "core/reference.h"
#include "core/io/packet_peer_udp.h"
#include "core/variant.h"
#include "modules/bitset/bitset.h"
#include "modules/bitstreamqueue/bitstreamqueue.h"
#include "state_connexion.h"
@ -89,6 +90,9 @@ public:
void process(int delta);
bool connected();
Variant get_server_messages();
static bool is_active();
static void terminate_connexion();
//MessageDescriptionNode & get_master_message_description_node();

View file

@ -32,6 +32,7 @@ NetworkData::~NetworkData()
void NetworkData::initialize()
{
// Initialize counter
this->_recieved_new_server_tick = false;
this->_current_received_number = 0;
this->_last_received_number = 0;
this->_quit_id = 0;

View file

@ -26,6 +26,8 @@
#include "core/reference.h"
#include "modules/bitset/bitset.h"
#include "core/ustring.h"
//#include "core/dictionary.h"
#include "core/array.h"
//define MAX_LOOP_READ_BY_STEP 10
#define NUM_BITS_IN_LONG_ACK 1024
@ -35,6 +37,7 @@ class NetworkData
public:
uint32_t _ack_bit_mask;
bool _recieved_new_server_tick;
uint32_t _current_server_tick;
uint32_t _current_client_tick;
@ -70,6 +73,10 @@ public:
uint32_t _last_ack_1[2];
uint32_t _last_ack_2[4];
//Dictionary _server_messages;
Array _server_messages;
NetworkData();
~NetworkData();

View file

@ -367,6 +367,25 @@ void StateConnectionConnected::send_system_ack_probe()
this->_data->_latest_probes.clear();
}
void StateConnectionConnected::send_system_ask_tick()
{
// khanat-opennel-code/code/ryzom/client/src/network_connection.cpp # void CNetworkConnection::sendNormalMessage()
DBG_PRINT("Send system ACK TICK");
BitStream msgout;
msgout.put_uint32(this->_data->_current_received_number);
msgout.put_bool(false);
msgout.put_uint32(this->_data->_last_received_number);
msgout.put_uint32(this->_data->_ack_bit_mask);
DBG_PRINT("current_received_number:" + itos(this->_data->_current_received_number) + " last_received_number:" + itos(this->_data->_last_received_number) + " ack_bit_mask:" + itos(this->_data->_ack_bit_mask));
if (this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK)
{
ERR_PRINT("Error to send disconnect");
return;
}
this->_data->_recieved_new_server_tick = false;
}
void StateConnectionConnected::receive_system_sync(Ref<BitStream> msgin)
{
bool valide = true;
@ -430,6 +449,7 @@ void StateConnectionConnected::receive_message(int index)
}
this->_data->_current_received_number = current_received_number;
this->_data->_recieved_new_server_tick = true;
Ref<BitStream> msgin = field->get_msgin();
system_mode = msgin->get_bool();
@ -484,6 +504,8 @@ void StateConnectionConnected::send_message()
this->send_system_ack_sync();
if (this->_data->_latest_probes.size() != 0 )
this->send_system_ack_probe();
if (this->_data->_recieved_new_server_tick == true)
this->send_system_ask_tick();
}
/*
*

View file

@ -142,6 +142,7 @@ public:
void send_system_disconnect();
void send_system_ack_sync();
void send_system_ack_probe();
void send_system_ask_tick();
void receive_system_sync(Ref<BitStream> msgin);
void receive_message(int index);
void send_message();