update network part
This commit is contained in:
parent
6ec43b2a00
commit
67a9fa8dbc
24 changed files with 853 additions and 230 deletions
|
@ -21,6 +21,8 @@ class connexion:
|
||||||
# var _url_register = "http://149.91.80.160/ams/index.php?page=register"
|
# var _url_register = "http://149.91.80.160/ams/index.php?page=register"
|
||||||
var _url_register = "http://lirria.khaganat.net/ams/index.php?page=register"
|
var _url_register = "http://lirria.khaganat.net/ams/index.php?page=register"
|
||||||
|
|
||||||
|
var _config_filename = "user://connexion.cfg"
|
||||||
|
|
||||||
var _language = "fr"
|
var _language = "fr"
|
||||||
var _valid_certificate = true
|
var _valid_certificate = true
|
||||||
|
|
||||||
|
@ -31,7 +33,7 @@ class connexion:
|
||||||
config_file.set_value("register", "url", _url_register)
|
config_file.set_value("register", "url", _url_register)
|
||||||
config_file.set_value("global", "valid_certificate", _valid_certificate)
|
config_file.set_value("global", "valid_certificate", _valid_certificate)
|
||||||
config_file.set_value("global", "language", _language)
|
config_file.set_value("global", "language", _language)
|
||||||
config_file.save("user://connexion.cfg")
|
config_file.save(_config_filename)
|
||||||
|
|
||||||
func _init():
|
func _init():
|
||||||
print("[config connexion] Load connexion config")
|
print("[config connexion] Load connexion config")
|
||||||
|
@ -39,9 +41,9 @@ class connexion:
|
||||||
var config_file = ConfigFile.new()
|
var config_file = ConfigFile.new()
|
||||||
|
|
||||||
# /home/<account>/.local/share/godot/app_userdata/Khanat/connexion.cfg
|
# /home/<account>/.local/share/godot/app_userdata/Khanat/connexion.cfg
|
||||||
var err = config_file.load("user://connexion.cfg")
|
var err = config_file.load(_config_filename)
|
||||||
if err:
|
if err:
|
||||||
print("Error code when loading player config file khanat.cfg: ", err)
|
print("Error code when loading player config file connexion.cfg: ", err)
|
||||||
save()
|
save()
|
||||||
|
|
||||||
self._url_login = config_file.get_value("login", "url", self._url_login)
|
self._url_login = config_file.get_value("login", "url", self._url_login)
|
||||||
|
|
|
@ -4,53 +4,53 @@ signal return_pressed
|
||||||
signal font_changed( value )
|
signal font_changed( value )
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Fullscreen/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/fullscreen" )
|
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Fullscreen/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/fullscreen" )
|
||||||
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Borderless/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/borderless" )
|
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Borderless/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/borderless" )
|
||||||
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Resizable/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/resizable" )
|
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Resizable/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/resizable" )
|
||||||
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/CurrentScreen/SpinBox.value = OS.current_screen
|
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/CurrentScreen/SpinBox.value = OS.current_screen
|
||||||
|
|
||||||
$Menus/TabContainer/connexion/v_box_container/h_box_container4/language.add_item("fr")
|
$Menus/TabContainer/connexion/v_box_container/h_box_container4/language.add_item("fr")
|
||||||
$Menus/TabContainer/connexion/v_box_container/h_box_container4/language.add_item("en")
|
$Menus/TabContainer/connexion/v_box_container/h_box_container4/language.add_item("en")
|
||||||
load_settings()
|
load_settings()
|
||||||
|
|
||||||
|
|
||||||
func _on_font_size_bar_value_changed(value):
|
func _on_font_size_bar_value_changed(value):
|
||||||
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size/font_size_value.text = str( value )
|
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size/font_size_value.text = str( value )
|
||||||
$Menus.get_theme().default_font.size = value
|
$Menus.get_theme().default_font.size = value
|
||||||
emit_signal( "font_changed", value )
|
emit_signal( "font_changed", value )
|
||||||
|
|
||||||
func load_settings():
|
func load_settings():
|
||||||
|
|
||||||
var config_file = ConfigFile.new()
|
var config_file = ConfigFile.new()
|
||||||
var err = config_file.load( "user://settings.cfg" )
|
var err = config_file.load( "user://settings.cfg" )
|
||||||
if err == ERR_CANT_OPEN or err == ERR_FILE_NOT_FOUND:
|
if err == ERR_CANT_OPEN or err == ERR_FILE_NOT_FOUND:
|
||||||
# On suppose que le fichier n'existe pas encore, donc on le crée.
|
# On suppose que le fichier n'existe pas encore, donc on le crée.
|
||||||
config_file.set_value( "theme", "font_size", 14 )
|
config_file.set_value( "theme", "font_size", 14 )
|
||||||
config_file.save( "user://settings.cfg" )
|
config_file.save( "user://settings.cfg" )
|
||||||
elif not err == OK:
|
elif not err == OK:
|
||||||
print("[res://gui_scene/GUI/Settings/Settings.gd:load_settings] Error code when loading config file: ", err)
|
print("[res://gui_scene/GUI/Settings/Settings.gd:load_settings] Error code when loading config file: ", err)
|
||||||
|
|
||||||
global.font_size = config_file.get_value( "theme", "font_size" )
|
global.font_size = config_file.get_value( "theme", "font_size" )
|
||||||
if $Menus.get_theme():
|
if $Menus.get_theme():
|
||||||
$Menus.get_theme().default_font.size = global.font_size
|
$Menus.get_theme().default_font.size = global.font_size
|
||||||
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size_bar.value = global.font_size
|
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size_bar.value = global.font_size
|
||||||
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size/font_size_value.text = str( global.font_size )
|
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size/font_size_value.text = str( global.font_size )
|
||||||
|
|
||||||
#var connexion = load("res://assets/Scripts/Config/connexion.gd").new()
|
#var connexion = load("res://assets/Scripts/Config/connexion.gd").new()
|
||||||
var script_connexion = preload("res://assets/Scripts/Config/connexion.gd")
|
var script_connexion = preload("res://assets/Scripts/Config/connexion.gd")
|
||||||
var connexion = script_connexion.connexion.new()
|
var connexion = script_connexion.connexion.new()
|
||||||
var language = connexion.get_language()
|
var language = connexion.get_language()
|
||||||
$Menus/TabContainer/connexion/v_box_container/h_box_container/register.text = connexion.get_url_register()
|
$Menus/TabContainer/connexion/v_box_container/h_box_container/register.text = connexion.get_url_register()
|
||||||
$Menus/TabContainer/connexion/v_box_container/h_box_container2/connexion.text = connexion.get_url_login()
|
$Menus/TabContainer/connexion/v_box_container/h_box_container2/connexion.text = connexion.get_url_login()
|
||||||
$Menus/TabContainer/connexion/v_box_container/h_box_container3/certificate_valid.pressed = connexion.get_valid_certificate()
|
$Menus/TabContainer/connexion/v_box_container/h_box_container3/certificate_valid.pressed = connexion.get_valid_certificate()
|
||||||
# language
|
# language
|
||||||
for i in range(0, $Menus/TabContainer/connexion/v_box_container/h_box_container4/language.get_item_count()):
|
for i in range(0, $Menus/TabContainer/connexion/v_box_container/h_box_container4/language.get_item_count()):
|
||||||
if $Menus/TabContainer/connexion/v_box_container/h_box_container4/language.get_item_text(i) == language:
|
if $Menus/TabContainer/connexion/v_box_container/h_box_container4/language.get_item_text(i) == language:
|
||||||
$Menus/TabContainer/connexion/v_box_container/h_box_container4/language.select(i)
|
$Menus/TabContainer/connexion/v_box_container/h_box_container4/language.select(i)
|
||||||
break
|
break
|
||||||
#$Menus/TabContainer/connexion/v_box_container/h_box_container4/language.
|
#$Menus/TabContainer/connexion/v_box_container/h_box_container4/language.
|
||||||
#.selected = language
|
#.selected = language
|
||||||
#$Menus/TabContainer/connexion/v_box_container/h_box_container4/language.selected
|
#$Menus/TabContainer/connexion/v_box_container/h_box_container4/language.selected
|
||||||
|
|
||||||
#func _on_ReturnButton_pressed():
|
#func _on_ReturnButton_pressed():
|
||||||
# var config_file = ConfigFile.new()
|
# var config_file = ConfigFile.new()
|
||||||
|
@ -63,64 +63,64 @@ func load_settings():
|
||||||
|
|
||||||
|
|
||||||
func _on_Title_text_changed(new_text):
|
func _on_Title_text_changed(new_text):
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
# Changing windows title
|
# Changing windows title
|
||||||
var new_title = "Khanat"
|
var new_title = "Khanat"
|
||||||
new_text = new_text.strip_edges()
|
new_text = new_text.strip_edges()
|
||||||
if not new_text == "":
|
if not new_text == "":
|
||||||
new_title = new_text
|
new_title = new_text
|
||||||
new_title += " (" + String(OS.get_window_size().x) + "x" + String(OS.get_window_size().y) + ")"
|
new_title += " (" + String(OS.get_window_size().x) + "x" + String(OS.get_window_size().y) + ")"
|
||||||
OS.set_window_title( new_title )
|
OS.set_window_title( new_title )
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
|
|
||||||
func _on_Fullscreen_toggled(button_pressed):
|
func _on_Fullscreen_toggled(button_pressed):
|
||||||
if ProjectSettings.has_setting( "display/window/size/fullscreen" ):
|
if ProjectSettings.has_setting( "display/window/size/fullscreen" ):
|
||||||
ProjectSettings.set_setting("display/window/size/fullscreen", button_pressed)
|
ProjectSettings.set_setting("display/window/size/fullscreen", button_pressed)
|
||||||
OS.window_fullscreen = ProjectSettings.get_setting("display/window/size/fullscreen")
|
OS.window_fullscreen = ProjectSettings.get_setting("display/window/size/fullscreen")
|
||||||
|
|
||||||
func _on_Borderless_toggled(button_pressed):
|
func _on_Borderless_toggled(button_pressed):
|
||||||
if ProjectSettings.has_setting( "display/window/size/borderless" ):
|
if ProjectSettings.has_setting( "display/window/size/borderless" ):
|
||||||
ProjectSettings.set_setting("display/window/size/borderless", button_pressed)
|
ProjectSettings.set_setting("display/window/size/borderless", button_pressed)
|
||||||
OS.window_borderless = ProjectSettings.get_setting("display/window/size/borderless")
|
OS.window_borderless = ProjectSettings.get_setting("display/window/size/borderless")
|
||||||
|
|
||||||
func _on_Resizable_toggled(button_pressed):
|
func _on_Resizable_toggled(button_pressed):
|
||||||
if ProjectSettings.has_setting( "display/window/size/resizable" ):
|
if ProjectSettings.has_setting( "display/window/size/resizable" ):
|
||||||
ProjectSettings.set_setting("display/window/size/resizable", button_pressed)
|
ProjectSettings.set_setting("display/window/size/resizable", button_pressed)
|
||||||
OS.window_resizable = ProjectSettings.get_setting("display/window/size/resizable")
|
OS.window_resizable = ProjectSettings.get_setting("display/window/size/resizable")
|
||||||
|
|
||||||
# La fonction existe dans la doc mais le moteur lui ne la reconnait pas,
|
# La fonction existe dans la doc mais le moteur lui ne la reconnait pas,
|
||||||
# soit il y a une subtilité quelquepart soit la doc n'est pas à jour.
|
# soit il y a une subtilité quelquepart soit la doc n'est pas à jour.
|
||||||
func _on_AlwaysOnTop_toggled(button_pressed):
|
func _on_AlwaysOnTop_toggled(button_pressed):
|
||||||
# OS.set_window_always_on_top( button_pressed )
|
# OS.set_window_always_on_top( button_pressed )
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func _on_SpinBox_value_changed(value):
|
func _on_SpinBox_value_changed(value):
|
||||||
OS.current_screen = value
|
OS.current_screen = value
|
||||||
|
|
||||||
func _on_ApplyButton_pressed():
|
func _on_ApplyButton_pressed():
|
||||||
var config_file = ConfigFile.new()
|
var config_file = ConfigFile.new()
|
||||||
var err = config_file.load( "user://settings.cfg" )
|
var err = config_file.load( "user://settings.cfg" )
|
||||||
if err:
|
if err:
|
||||||
print("[res://gui_scene/GUI/Settings/Settings.gd:_on_ApplyButton_pressed] Error code when loading config file: ", err)
|
print("[res://gui_scene/GUI/Settings/Settings.gd:_on_ApplyButton_pressed] Error code when loading config file: ", err)
|
||||||
config_file.set_value("theme", "font_size", $Menus.get_theme().default_font.size)
|
config_file.set_value("theme", "font_size", $Menus.get_theme().default_font.size)
|
||||||
config_file.save( "user://settings.cfg" )
|
config_file.save( "user://settings.cfg" )
|
||||||
|
|
||||||
# Save Connexion
|
# Save Connexion
|
||||||
var script_connexion = preload("res://assets/Scripts/Config/connexion.gd")
|
var script_connexion = preload("res://assets/Scripts/Config/connexion.gd")
|
||||||
var connexion = script_connexion.connexion.new()
|
var connexion = script_connexion.connexion.new()
|
||||||
connexion.set_url_register($Menus/TabContainer/connexion/v_box_container/h_box_container/register.text)
|
connexion.set_url_register($Menus/TabContainer/connexion/v_box_container/h_box_container/register.text)
|
||||||
connexion.set_url_login($Menus/TabContainer/connexion/v_box_container/h_box_container2/connexion.text)
|
connexion.set_url_login($Menus/TabContainer/connexion/v_box_container/h_box_container2/connexion.text)
|
||||||
var id = $Menus/TabContainer/connexion/v_box_container/h_box_container4/language.get_selected_id()
|
var id = $Menus/TabContainer/connexion/v_box_container/h_box_container4/language.get_selected_id()
|
||||||
var language = $Menus/TabContainer/connexion/v_box_container/h_box_container4/language.get_item_text(id)
|
var language = $Menus/TabContainer/connexion/v_box_container/h_box_container4/language.get_item_text(id)
|
||||||
connexion.set_language(language)
|
connexion.set_language(language)
|
||||||
connexion.set_valid_certificate($Menus/TabContainer/connexion/v_box_container/h_box_container3/certificate_valid.pressed)
|
connexion.set_valid_certificate($Menus/TabContainer/connexion/v_box_container/h_box_container3/certificate_valid.pressed)
|
||||||
connexion.save()
|
connexion.save()
|
||||||
emit_signal( "return_pressed" )
|
emit_signal( "return_pressed" )
|
||||||
|
|
||||||
func _on_CancelButton_pressed():
|
func _on_CancelButton_pressed():
|
||||||
emit_signal( "return_pressed" )
|
emit_signal( "return_pressed" )
|
||||||
|
|
||||||
func _unhandled_input(event):
|
func _unhandled_input(event):
|
||||||
if event is InputEventKey:
|
if event is InputEventKey:
|
||||||
if event.pressed and event.scancode == KEY_ESCAPE:
|
if event.pressed and event.scancode == KEY_ESCAPE:
|
||||||
emit_signal( "return_pressed" )
|
emit_signal( "return_pressed" )
|
||||||
|
|
|
@ -71,6 +71,9 @@ custom_constants/margin_top = 0
|
||||||
custom_constants/margin_left = 0
|
custom_constants/margin_left = 0
|
||||||
custom_constants/margin_bottom = 0
|
custom_constants/margin_bottom = 0
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
[node name="texture_rect" type="TextureRect" parent="."]
|
[node name="texture_rect" type="TextureRect" parent="."]
|
||||||
margin_right = 1280.0
|
margin_right = 1280.0
|
||||||
|
@ -231,7 +234,6 @@ margin_top = 49.0
|
||||||
mouse_filter = 0
|
mouse_filter = 0
|
||||||
|
|
||||||
[node name="ScrollContainer" type="ScrollContainer" parent="Menus/TabContainer/Controles"]
|
[node name="ScrollContainer" type="ScrollContainer" parent="Menus/TabContainer/Controles"]
|
||||||
editor/display_folded = true
|
|
||||||
margin_right = 1280.0
|
margin_right = 1280.0
|
||||||
margin_bottom = 574.0
|
margin_bottom = 574.0
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
|
@ -294,7 +296,6 @@ margin_bottom = -1.0
|
||||||
hint_tooltip = "Interface."
|
hint_tooltip = "Interface."
|
||||||
|
|
||||||
[node name="Header" type="HBoxContainer" parent="Menus/TabContainer/Controles/ScrollContainer/TabContainer/Interface"]
|
[node name="Header" type="HBoxContainer" parent="Menus/TabContainer/Controles/ScrollContainer/TabContainer/Interface"]
|
||||||
editor/display_folded = true
|
|
||||||
margin_right = 1022.0
|
margin_right = 1022.0
|
||||||
margin_bottom = 38.0
|
margin_bottom = 38.0
|
||||||
|
|
||||||
|
@ -401,7 +402,6 @@ margin_right = -1.0
|
||||||
margin_bottom = -1.0
|
margin_bottom = -1.0
|
||||||
|
|
||||||
[node name="Header" type="HBoxContainer" parent="Menus/TabContainer/Controles/ScrollContainer/TabContainer/Deplacement"]
|
[node name="Header" type="HBoxContainer" parent="Menus/TabContainer/Controles/ScrollContainer/TabContainer/Deplacement"]
|
||||||
editor/display_folded = true
|
|
||||||
margin_right = 1022.0
|
margin_right = 1022.0
|
||||||
margin_bottom = 37.0
|
margin_bottom = 37.0
|
||||||
|
|
||||||
|
@ -707,8 +707,8 @@ margin_right = 1280.0
|
||||||
margin_bottom = 139.0
|
margin_bottom = 139.0
|
||||||
|
|
||||||
[node name="certificate_valid" type="CheckBox" parent="Menus/TabContainer/connexion/v_box_container/h_box_container3"]
|
[node name="certificate_valid" type="CheckBox" parent="Menus/TabContainer/connexion/v_box_container/h_box_container3"]
|
||||||
margin_left = 485.0
|
margin_left = 517.0
|
||||||
margin_right = 794.0
|
margin_right = 762.0
|
||||||
margin_bottom = 33.0
|
margin_bottom = 33.0
|
||||||
size_flags_horizontal = 6
|
size_flags_horizontal = 6
|
||||||
size_flags_vertical = 6
|
size_flags_vertical = 6
|
||||||
|
|
|
@ -6,25 +6,48 @@ extends Control
|
||||||
# var b = "text"
|
# var b = "text"
|
||||||
|
|
||||||
var _networkconnection = NetworkConnection.new()
|
var _networkconnection = NetworkConnection.new()
|
||||||
|
var _history = Array()
|
||||||
|
const StringManager = preload("res://assets/Scripts/Config/string_manager.gd")
|
||||||
|
var _string_manager = StringManager.new()
|
||||||
|
var _phrases_not_decoded = Array()
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready():
|
func _ready():
|
||||||
pass # Replace with function body.
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
func analyze_message(message):
|
||||||
|
if message['action'] == Action.ACTION_POSITION_CODE:
|
||||||
|
pass
|
||||||
|
elif message['action'] == Action.ACTION_GENERIC_CODE:
|
||||||
|
if message['impulse'] == ImpulseBase.STRING_MANAGER_RELOAD_CACHE:
|
||||||
|
print(message['timestamp'])
|
||||||
|
_string_manager.set_timestamp(message['timestamp'])
|
||||||
|
elif message['impulse'] == ImpulseBase.STRING_MANAGER_PHRASE_SEND:
|
||||||
|
if _string_manager.check_phases(message['dynId']) == false:
|
||||||
|
_phrases_not_decoded.append(message)
|
||||||
|
var command = {'action': Action.ACTION_GENERIC_CODE, 'impulse': ImpulseBase.STRING_MANAGER_STRING_RQ, "stringId": message['dynId']}
|
||||||
|
_networkconnection.put_command(command);
|
||||||
|
_networkconnection.put_command(command);
|
||||||
|
return
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
_networkconnection.process(delta)
|
_networkconnection.process(delta)
|
||||||
var data = _networkconnection.get_server_messages()
|
var data = _networkconnection.get_server_messages()
|
||||||
##print("******* data:", data.size(), data)
|
##print("******* data:", data.size(), data)
|
||||||
if data.size() > 0:
|
while data.size() >0:
|
||||||
|
var message = data.pop_front()
|
||||||
|
_history.append(message)
|
||||||
|
print(message)
|
||||||
|
analyze_message(message)
|
||||||
|
if _history.size() > 0:
|
||||||
# just to see last message (normally cleanned each time we read message)
|
# just to see last message (normally cleanned each time we read message)
|
||||||
while data.size() > 10:
|
while _history.size() > 10:
|
||||||
var ele = data.pop_front()
|
var element = _history.pop_front()
|
||||||
print("*** remove:" , ele)
|
print("*** remove:" , element)
|
||||||
var message = "tick :" + String(_networkconnection.get_server_tick()) + '\n'
|
var message = "tick :" + String(_networkconnection.get_server_tick()) + '\n'
|
||||||
for i in range(0, data.size()):
|
for i in range(0, _history.size()):
|
||||||
message += String(data[i]) + '\n'
|
message += String(_history[i]) + '\n'
|
||||||
$label.text = message
|
$label.text = message
|
||||||
|
|
||||||
func _show():
|
func _show():
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "core/reference.h"
|
#include "core/reference.h"
|
||||||
#include "core/array.h"
|
#include "core/array.h"
|
||||||
#include "core/dictionary.h"
|
#include "core/dictionary.h"
|
||||||
|
#include "core/list.h"
|
||||||
#include "modules/debug/debug.h"
|
#include "modules/debug/debug.h"
|
||||||
#include "modules/networkconnection/network_data.h"
|
#include "modules/networkconnection/network_data.h"
|
||||||
#include "modules/networkconnection/state_connexion.h"
|
#include "modules/networkconnection/state_connexion.h"
|
||||||
|
@ -28,6 +29,8 @@
|
||||||
#include "modules/referentialmessage/referentialmessagecore.h"
|
#include "modules/referentialmessage/referentialmessagecore.h"
|
||||||
#include "modules/impulse/impulsebase.h"
|
#include "modules/impulse/impulsebase.h"
|
||||||
#include "action_factory.h"
|
#include "action_factory.h"
|
||||||
|
#include "action_genericmultipart.h"
|
||||||
|
#include "action.h"
|
||||||
|
|
||||||
void ActionFactory::decode_message(NetworkData * data, Ref<BitStream> msgin)
|
void ActionFactory::decode_message(NetworkData * data, Ref<BitStream> msgin)
|
||||||
{
|
{
|
||||||
|
@ -35,9 +38,11 @@ void ActionFactory::decode_message(NetworkData * data, Ref<BitStream> msgin)
|
||||||
ReferentialMessage ref_msg;
|
ReferentialMessage ref_msg;
|
||||||
uint32_t id = ref_msg.read_command(msgin);
|
uint32_t id = ref_msg.read_command(msgin);
|
||||||
DBG_PRINT("Decode message:" + ImpulseBase::get_command_name(id));
|
DBG_PRINT("Decode message:" + ImpulseBase::get_command_name(id));
|
||||||
value["command"] = id;
|
value["action"] = Action::CODE::ACTION_GENERIC_CODE;
|
||||||
|
value["impulse"] = id;
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
value["command_debug"] = ImpulseBase::get_command_name(id);
|
value["action_debug"] = "ACTION_GENERIC_CODE";
|
||||||
|
value["impulse_debug"] = ImpulseBase::get_command_name(id);
|
||||||
#endif
|
#endif
|
||||||
switch(id)
|
switch(id)
|
||||||
{
|
{
|
||||||
|
@ -67,6 +72,65 @@ void ActionFactory::decode_message(NetworkData * data, Ref<BitStream> msgin)
|
||||||
}
|
}
|
||||||
case ImpulseBase::Impulse::CONNECTION_USER_CHARS:
|
case ImpulseBase::Impulse::CONNECTION_USER_CHARS:
|
||||||
{
|
{
|
||||||
|
// khanat-opennel-code/code/ryzom/client/src/net_manager.cpp void impulseUserChars(NLMISC::CBitMemStream &impulse)
|
||||||
|
// khanat-opennel-code/code/ryzom/server/src/entities_game_service/entity_manager/entity_callbacks.cpp void sendCharactersSummary( CPlayer *player, bool AllAutorized, uint32 bitfieldOwnerOfActiveAnimSession, uint32 bitfieldOwnerOfEditSession )
|
||||||
|
uint32_t i;
|
||||||
|
value["ServerPeopleActive"] = msgin->get_uint8();
|
||||||
|
value["ServerCareerActive"] = msgin->get_uint8();
|
||||||
|
uint32_t character_summaries_Len = msgin->get_uint32();
|
||||||
|
|
||||||
|
value["CharacterSummaries_Len"] = character_summaries_Len;
|
||||||
|
Array character_summaries;
|
||||||
|
for(i=0;i<character_summaries_Len;++i)
|
||||||
|
{
|
||||||
|
Dictionary character;
|
||||||
|
character["Version"] = msgin->get_version();
|
||||||
|
character["Mainland"] = msgin->get_uint32();
|
||||||
|
character["Name"] = msgin->get_ustring();
|
||||||
|
character["People"] = msgin->get_uint32();
|
||||||
|
character["Location"] = msgin->get_uint32();
|
||||||
|
character["VisualPropA"] = msgin->get_uint64();
|
||||||
|
character["VisualPropB"] = msgin->get_uint64();
|
||||||
|
character["VisualPropC"] = msgin->get_uint64();
|
||||||
|
character["SheetId"] = msgin->get_uint32();
|
||||||
|
character["Title"] = msgin->get_sint32();
|
||||||
|
character["CharacterSlot"] = msgin->get_uint8();
|
||||||
|
character["InRingSession"] = msgin->get_bool();
|
||||||
|
character["HasEditSession"] = msgin->get_bool();
|
||||||
|
character["InNewbieland"] = msgin->get_bool();
|
||||||
|
character_summaries.append(character);
|
||||||
|
}
|
||||||
|
value["CharacterSummaries"] = character_summaries;
|
||||||
|
|
||||||
|
uint32_t shard_names_Len = msgin->get_uint32();
|
||||||
|
value["shardNames_Len"] = shard_names_Len;
|
||||||
|
Array shard_names;
|
||||||
|
for(i=0;i<shard_names_Len;++i)
|
||||||
|
{
|
||||||
|
Dictionary shard_name;
|
||||||
|
shard_name["ShardNames"] = msgin->get_string();
|
||||||
|
shard_names.append(shard_name);
|
||||||
|
}
|
||||||
|
value["ShardNames"] = shard_names;
|
||||||
|
|
||||||
|
value["Privileges"] = msgin->get_string();
|
||||||
|
value["FreeTrial"] = msgin->get_bool();
|
||||||
|
|
||||||
|
uint32_t mainlands_len = msgin->get_uint32();
|
||||||
|
value["Mainlands_Len"] = mainlands_len;
|
||||||
|
Array mainlands;
|
||||||
|
for(i=0;i<mainlands_len;++i)
|
||||||
|
{
|
||||||
|
Dictionary mainland;
|
||||||
|
mainland["id"] = msgin->get_uint32();
|
||||||
|
mainland["Name"] = msgin->get_ustring();
|
||||||
|
mainland["Description"] = msgin->get_ustring();
|
||||||
|
mainland["LanguageCode"] = msgin->get_string();
|
||||||
|
mainland["Online"] = msgin->get_bool();
|
||||||
|
mainlands.append(mainland);
|
||||||
|
}
|
||||||
|
value["Mainlands"] = mainlands;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ImpulseBase::Impulse::CONNECTION_CREATE_CHAR:
|
case ImpulseBase::Impulse::CONNECTION_CREATE_CHAR:
|
||||||
|
@ -935,6 +999,17 @@ void ActionFactory::decode_message(NetworkData * data, Ref<BitStream> msgin)
|
||||||
}
|
}
|
||||||
case ImpulseBase::Impulse::STRING_MANAGER_PHRASE_SEND:
|
case ImpulseBase::Impulse::STRING_MANAGER_PHRASE_SEND:
|
||||||
{
|
{
|
||||||
|
int i = 1;
|
||||||
|
uint32_t dynId = msgin->get_uint32();
|
||||||
|
value["dynId"] = dynId;
|
||||||
|
uint32_t StringId = msgin->get_uint32();
|
||||||
|
value["StringId_0"] = StringId;
|
||||||
|
while(msgin->number_bit_not_read() > 32)
|
||||||
|
{
|
||||||
|
StringId = msgin->get_uint32();
|
||||||
|
value["StringId_" + itos(i)] = StringId;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ImpulseBase::Impulse::STRING_MANAGER_STRING_RQ:
|
case ImpulseBase::Impulse::STRING_MANAGER_STRING_RQ:
|
||||||
|
@ -953,7 +1028,7 @@ void ActionFactory::decode_message(NetworkData * data, Ref<BitStream> msgin)
|
||||||
//param.push_back(timestamp);
|
//param.push_back(timestamp);
|
||||||
value["timestamp"] = timestamp;
|
value["timestamp"] = timestamp;
|
||||||
|
|
||||||
data->_server_messages.push_back(value);
|
//data->_server_messages.push_back(value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ImpulseBase::Impulse::GUILD_CREATE:
|
case ImpulseBase::Impulse::GUILD_CREATE:
|
||||||
|
@ -1389,6 +1464,7 @@ void ActionFactory::decode_message(NetworkData * data, Ref<BitStream> msgin)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
data->_server_messages.push_back(value);
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
// Check if we have read all data - only on debug mode
|
// Check if we have read all data - only on debug mode
|
||||||
{
|
{
|
||||||
|
@ -1397,7 +1473,8 @@ void ActionFactory::decode_message(NetworkData * data, Ref<BitStream> msgin)
|
||||||
{
|
{
|
||||||
DBG_PRINT("Read : " + itos(msgin->number_bit_not_read()));
|
DBG_PRINT("Read : " + itos(msgin->number_bit_not_read()));
|
||||||
if ( msgin->number_bit_not_read() >= 8 )
|
if ( msgin->number_bit_not_read() >= 8 )
|
||||||
last_data = msgin->get_uint8();
|
//last_data = msgin->get_uint8();
|
||||||
|
last_data = 1;
|
||||||
else
|
else
|
||||||
last_data = msgin->get_serial(msgin->number_bit_not_read());
|
last_data = msgin->get_serial(msgin->number_bit_not_read());
|
||||||
if ( last_data != 0 )
|
if ( last_data != 0 )
|
||||||
|
@ -1411,6 +1488,156 @@ void ActionFactory::decode_message(NetworkData * data, Ref<BitStream> msgin)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ActionFactory::encode_message(Dictionary value, Ref<BitStream> msgout)
|
||||||
|
{
|
||||||
|
ReferentialMessage ref_msg;
|
||||||
|
int id = value["impulse"];
|
||||||
|
|
||||||
|
ref_msg.write_command((ImpulseBase::Impulse)id, msgout);
|
||||||
|
DBG_PRINT("[ActionFactory::pack] ACTION_GENERIC_CODE encode_message A:" + itos(id) + " / " + msgout->show_detail());
|
||||||
|
switch(id)
|
||||||
|
{
|
||||||
|
case ImpulseBase::Impulse::TARGET_PARTY:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ImpulseBase::Impulse::STRING_MANAGER_STRING_RQ:
|
||||||
|
{
|
||||||
|
uint32_t stringId = value["stringId"];
|
||||||
|
msgout->put_uint32(stringId);
|
||||||
|
DBG_PRINT("[ActionFactory::pack] ACTION_GENERIC_CODE encode_message B:" + itos(id) + " / " + msgout->show_detail());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionFactory::code(int code, Ref<BitStream> msgout)
|
||||||
|
{
|
||||||
|
if(code < 4)
|
||||||
|
{
|
||||||
|
msgout->put_bool(true);
|
||||||
|
msgout->put_serial(code, 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msgout->put_bool(false);
|
||||||
|
msgout->put_uint8(code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionFactory::pack(NetworkData * data)
|
||||||
|
{
|
||||||
|
while(data->_command_to_send.size())
|
||||||
|
{
|
||||||
|
DBG_PRINT("[ActionFactory::pack]");
|
||||||
|
Dictionary value = data->_command_to_send.pop_front();
|
||||||
|
int id = value["action"];
|
||||||
|
switch(id)
|
||||||
|
{
|
||||||
|
case Action::CODE::ACTION_POSITION_CODE:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Action::CODE::ACTION_GENERIC_CODE:
|
||||||
|
case Action::CODE::ACTION_GENERIC_MULTI_PART_CODE:
|
||||||
|
{
|
||||||
|
Ref<BitStream> msg;
|
||||||
|
msg.instance();
|
||||||
|
encode_message(value, msg);
|
||||||
|
DBG_PRINT("[ActionFactory::pack] ACTION_GENERIC_CODE encode_message :" + msg->show_detail());
|
||||||
|
|
||||||
|
if( msg->size_data() < MAX_IMPULSE_BIT_SIZE ) // 1840 bits= 230*8
|
||||||
|
{
|
||||||
|
// ACTION_GENERIC_CODE
|
||||||
|
Ref<BitStream> msgout;
|
||||||
|
msgout.instance();
|
||||||
|
code(Action::CODE::ACTION_GENERIC_CODE, msgout);
|
||||||
|
msg->complet_byte();
|
||||||
|
DBG_PRINT("[ActionFactory::pack] ACTION_GENERIC_CODE encode_message (Bis):" + msg->show_detail());
|
||||||
|
DBG_PRINT("[ActionFactory::pack] ACTION_GENERIC_CODE prepared A :" + msgout->show_detail());
|
||||||
|
msgout->put_uint32(msg->size());
|
||||||
|
DBG_PRINT("[ActionFactory::pack] ACTION_GENERIC_CODE prepared B :" + msgout->show_detail());
|
||||||
|
msgout->put_bitstream(msg.ptr());
|
||||||
|
DBG_PRINT("[ActionFactory::pack] ACTION_GENERIC_CODE prepared C :" + msgout->show_detail());
|
||||||
|
data->_client_messages.append(msgout); //data->_client_messages.append(msgout->get_data());
|
||||||
|
DBG_PRINT("[ActionFactory::pack] ACTION_GENERIC_CODE prepared D :" + msgout->show_detail());
|
||||||
|
msgout.unref();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// ACTION_GENERIC_MULTI_PART_CODE
|
||||||
|
uint32_t size;
|
||||||
|
uint32_t last = 0;
|
||||||
|
uint32_t minimumBitSizeForMP = 1 + 2 + 2 + 4; // header
|
||||||
|
uint32_t availableSize = (MAX_IMPULSE_BIT_SIZE - minimumBitSizeForMP); // 8
|
||||||
|
uint32_t bytelen = msg->size();
|
||||||
|
uint16_t part;
|
||||||
|
uint16_t nbBlock = (bytelen + availableSize - 1); // availableSize
|
||||||
|
uint8_t num = data->_impulse_multi_part_number;
|
||||||
|
PoolByteArray msgTemp;
|
||||||
|
data->_impulse_multi_part_number += 1;
|
||||||
|
msg->complet_byte();
|
||||||
|
for(part = 0 ; part < nbBlock ; ++part)
|
||||||
|
{
|
||||||
|
Ref<BitStream> msgout;
|
||||||
|
msgout.instance();
|
||||||
|
code(Action::CODE::ACTION_GENERIC_MULTI_PART_CODE, msgout);
|
||||||
|
msgout->put_uint8(num);
|
||||||
|
msgout->put_uint16(part);
|
||||||
|
msgout->put_uint16(nbBlock);
|
||||||
|
size = availableSize;
|
||||||
|
if ( size + last > bytelen)
|
||||||
|
size = bytelen - last;
|
||||||
|
last = size;
|
||||||
|
msgout->put_uint32(size);
|
||||||
|
msgout->get_array_uint8(size);
|
||||||
|
//msgout->put_bitstream(msg.ptr());-------TODO
|
||||||
|
data->_client_messages.append(msgout); // data->_client_messages.append(msgout->get_data());
|
||||||
|
DBG_PRINT("[ActionFactory::pack] ACTION_GENERIC_MULTI_PART_CODE prepared :" + msgout->show_detail());
|
||||||
|
msgout.unref();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msg.unref();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Action::CODE::ACTION_SINT64:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Action::CODE::ACTION_SYNC_CODE:
|
||||||
|
{
|
||||||
|
// not used, here
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Action::CODE::ACTION_DISCONNECTION_CODE:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Action::CODE::ACTION_ASSOCIATION_CODE:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Action::CODE::ACTION_LOGIN_CODE:
|
||||||
|
{
|
||||||
|
// not used, here
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Action::CODE::ACTION_TARGET_SLOT_CODE:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Action::CODE::ACTION_DUMMY_CODE:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ActionFactory::unpack(NetworkData * data, Ref<BitStream> msgin)
|
void ActionFactory::unpack(NetworkData * data, Ref<BitStream> msgin)
|
||||||
{
|
{
|
||||||
bool shortcode = msgin->get_bool();
|
bool shortcode = msgin->get_bool();
|
||||||
|
@ -1423,7 +1650,7 @@ void ActionFactory::unpack(NetworkData * data, Ref<BitStream> msgin)
|
||||||
DBG_PRINT("code:" + itos(code));
|
DBG_PRINT("code:" + itos(code));
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
case ACTIONCODE::ACTION_POSITION_CODE:
|
case Action::CODE::ACTION_POSITION_CODE:
|
||||||
{
|
{
|
||||||
// khanat-opennel-code/code/ryzom/common/src/game_share/action_position.cpp:34 void CActionPosition::unpack (NLMISC::CBitMemStream &message)
|
// khanat-opennel-code/code/ryzom/common/src/game_share/action_position.cpp:34 void CActionPosition::unpack (NLMISC::CBitMemStream &message)
|
||||||
// px ( 16 bit unsigned )
|
// px ( 16 bit unsigned )
|
||||||
|
@ -1431,21 +1658,32 @@ void ActionFactory::unpack(NetworkData * data, Ref<BitStream> msgin)
|
||||||
// pz ( 16 bit unsigned ) : low bit have other signification
|
// pz ( 16 bit unsigned ) : low bit have other signification
|
||||||
// 0x01 : IsRelative
|
// 0x01 : IsRelative
|
||||||
// 0x02 : Interior
|
// 0x02 : Interior
|
||||||
DBG_PRINT("ACTION_GENERIC_CODE");
|
DBG_PRINT("ACTION_POSITION_CODE");
|
||||||
uint16_t px = msgin->get_uint16();
|
uint16_t px = msgin->get_uint16();
|
||||||
uint16_t py = msgin->get_uint16();
|
uint16_t py = msgin->get_uint16();
|
||||||
uint16_t pz = msgin->get_uint16();
|
uint16_t pz = msgin->get_uint16();
|
||||||
bool IsRelative = (pz & 0x1) != 0;
|
bool IsRelative = (pz & 0x1) != 0;
|
||||||
bool Interior = (pz & 0x2) != 0;
|
bool Interior = (pz & 0x2) != 0;
|
||||||
DBG_PRINT("ACTION_GENERIC_CODE px:" + uitos(px) + " py:" + uitos(py) + " pz:" + uitos(pz) + " IsRelative:" + uitos(IsRelative) + " Interior:" + uitos(Interior));
|
Dictionary msg;
|
||||||
|
msg["action"] = code;
|
||||||
|
#ifdef DEBUG_ENABLED
|
||||||
|
msg["action_debug"] = "ACTION_POSITION_CODE";
|
||||||
|
#endif
|
||||||
|
msg["px"] = px;
|
||||||
|
msg["py"] = px;
|
||||||
|
msg["pz"] = px;
|
||||||
|
msg["IsRelative"] = IsRelative;
|
||||||
|
msg["Interior"] = Interior;
|
||||||
|
data->_server_messages.push_back(msg);
|
||||||
|
DBG_PRINT("ACTION_POSITION_CODE px:" + uitos(px) + " py:" + uitos(py) + " pz:" + uitos(pz) + " IsRelative:" + uitos(IsRelative) + " Interior:" + uitos(Interior));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIONCODE::ACTION_GENERIC_CODE:
|
case Action::CODE::ACTION_GENERIC_CODE:
|
||||||
{
|
{
|
||||||
DBG_PRINT("ACTION_GENERIC_CODE");
|
|
||||||
// khanat-opennel-code/code/ryzom/common/src/game_share/action_generic.cpp void CActionGeneric::unpack (NLMISC::CBitMemStream &message)
|
// khanat-opennel-code/code/ryzom/common/src/game_share/action_generic.cpp void CActionGeneric::unpack (NLMISC::CBitMemStream &message)
|
||||||
// size ( 32 bits unsigned ) : if size > 512 we have an error (normally reject by server)
|
// size ( 32 bits unsigned ) : if size > 512 we have an error (normally reject by server)
|
||||||
// StreamByte ( Array : size * 8 bits unsigned )
|
// StreamByte ( Array : size * 8 bits unsigned )
|
||||||
|
DBG_PRINT("ACTION_GENERIC_CODE");
|
||||||
uint32_t size = msgin->get_uint32();
|
uint32_t size = msgin->get_uint32();
|
||||||
DBG_PRINT("ACTION_GENERIC_CODE size:" + uitos(size));
|
DBG_PRINT("ACTION_GENERIC_CODE size:" + uitos(size));
|
||||||
PoolByteArray StreamByte = msgin->get_array_uint8(size);
|
PoolByteArray StreamByte = msgin->get_array_uint8(size);
|
||||||
|
@ -1458,96 +1696,183 @@ void ActionFactory::unpack(NetworkData * data, Ref<BitStream> msgin)
|
||||||
tmp.unref();
|
tmp.unref();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIONCODE::ACTION_GENERIC_MULTI_PART_CODE:
|
case Action::CODE::ACTION_GENERIC_MULTI_PART_CODE:
|
||||||
{
|
{
|
||||||
DBG_PRINT("ACTION_GENERIC_MULTI_PART_CODE");
|
|
||||||
// khanat-opennel-code/code/ryzom/common/src/game_share/action_generic_multi_part.h:46 virtual void unpack (NLMISC::CBitMemStream &message)
|
// khanat-opennel-code/code/ryzom/common/src/game_share/action_generic_multi_part.h:46 virtual void unpack (NLMISC::CBitMemStream &message)
|
||||||
// Number ( 8 bits unsigned )
|
// Number ( 8 bits unsigned )
|
||||||
// Part ( 16 bits unsigned )
|
// Part ( 16 bits unsigned )
|
||||||
// NbBlock ( 16 bits unsigned )
|
// NbBlock ( 16 bits unsigned )
|
||||||
// size ( 32 bits unsigned )
|
// size ( 32 bits unsigned )
|
||||||
// PartCont ( Array : size * 8 bits unsigned )
|
// PartCont ( Array : size * 8 bits unsigned )
|
||||||
|
DBG_PRINT("ACTION_GENERIC_MULTI_PART_CODE");
|
||||||
uint8_t Number = msgin->get_uint8();
|
uint8_t Number = msgin->get_uint8();
|
||||||
uint16_t Part = msgin->get_uint16();
|
uint16_t Part = msgin->get_uint16();
|
||||||
uint16_t NbBlock = msgin->get_uint16();
|
uint16_t NbBlock = msgin->get_uint16();
|
||||||
uint32_t size = msgin->get_uint32();
|
uint32_t size = msgin->get_uint32();
|
||||||
PoolByteArray StreamByte = msgin->get_array_uint8(size);
|
PoolByteArray StreamByte = msgin->get_array_uint8(size);
|
||||||
//BitStream StreamByte = msgin->get_bitstream(size);
|
|
||||||
DBG_PRINT("ACTION_GENERIC_MULTI_PART_CODE Number:" + uitos(Number) + " Part:" + uitos(Part) + " NbBlock:" + uitos(NbBlock) + " size:" + uitos(size));
|
DBG_PRINT("ACTION_GENERIC_MULTI_PART_CODE Number:" + uitos(Number) + " Part:" + uitos(Part) + " NbBlock:" + uitos(NbBlock) + " size:" + uitos(size));
|
||||||
|
if ( ! data->_block.has(Number) )
|
||||||
|
{
|
||||||
|
Dictionary newelement;
|
||||||
|
data->_block[Number] = newelement;
|
||||||
|
data->_block_used[Number] = 0;
|
||||||
|
//data->_block[Number] = new GenericMultiPart(Number, NbBlock);
|
||||||
|
}
|
||||||
|
Dictionary ele = data->_block[Number]; //[Part] = StreamByte;
|
||||||
|
ele[Part] = StreamByte;
|
||||||
|
{
|
||||||
|
Ref<BitStream> tmp;
|
||||||
|
tmp.instance();
|
||||||
|
tmp->put_array_uint8(StreamByte);
|
||||||
|
tmp.unref();
|
||||||
|
}
|
||||||
|
if( ele.size() == NbBlock)
|
||||||
|
{
|
||||||
|
int used = data->_block_used[Number];
|
||||||
|
if ( used != 0 )
|
||||||
|
break;
|
||||||
|
int i;
|
||||||
|
PoolByteArray full;
|
||||||
|
for(i = 0;i < NbBlock; ++i)
|
||||||
|
{
|
||||||
|
PoolByteArray tmp = ele[i];
|
||||||
|
full.append_array(ele[i]);
|
||||||
|
}
|
||||||
|
Ref<BitStream> tmp;
|
||||||
|
tmp.instance();
|
||||||
|
tmp->put_array_uint8(full);
|
||||||
|
decode_message(data, tmp);
|
||||||
|
tmp.unref();
|
||||||
|
data->_block_used[Number] = 20;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIONCODE::ACTION_SINT64:
|
case Action::CODE::ACTION_SINT64:
|
||||||
{
|
{
|
||||||
DBG_PRINT("ACTION_SINT64");
|
|
||||||
// khanat-opennel-code/code/ryzom/common/src/game_share/action_sint64.cpp:86 void CActionSint64::unpack (NLMISC::CBitMemStream &message)
|
// khanat-opennel-code/code/ryzom/common/src/game_share/action_sint64.cpp:86 void CActionSint64::unpack (NLMISC::CBitMemStream &message)
|
||||||
// value ( 64 bits unsigned )
|
// value ( 64 bits unsigned )
|
||||||
|
DBG_PRINT("ACTION_SINT64");
|
||||||
uint64_t value = msgin->get_uint64();
|
uint64_t value = msgin->get_uint64();
|
||||||
|
Dictionary msg;
|
||||||
|
msg["action"] = code;
|
||||||
|
#ifdef DEBUG_ENABLED
|
||||||
|
msg["action_debug"] = "ACTION_SINT64";
|
||||||
|
#endif
|
||||||
|
msg["value"] = value;
|
||||||
|
data->_server_messages.push_back(msg);
|
||||||
DBG_PRINT("ACTION_SINT64 value:" + uitos(value));
|
DBG_PRINT("ACTION_SINT64 value:" + uitos(value));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIONCODE::ACTION_SYNC_CODE:
|
case Action::CODE::ACTION_SYNC_CODE:
|
||||||
{
|
{
|
||||||
DBG_PRINT("ACTION_SYNC_CODE");
|
|
||||||
// khanat-opennel-code/code/ryzom/common/src/game_share/action_sync.h:44 virtual void unpack (NLMISC::CBitMemStream &message)
|
// khanat-opennel-code/code/ryzom/common/src/game_share/action_sync.h:44 virtual void unpack (NLMISC::CBitMemStream &message)
|
||||||
// Sync ( 32 bits unsigned )
|
// Sync ( 32 bits unsigned )
|
||||||
// BKEntityId ( 64 bits unsigned ) [see definition : khanat-opennel-code/code/nel/include/nel/misc/entity_id.h:64]
|
// BKEntityId ( 64 bits unsigned ) [see definition : khanat-opennel-code/code/nel/include/nel/misc/entity_id.h:64]
|
||||||
|
DBG_PRINT("ACTION_SYNC_CODE");
|
||||||
uint32_t Sync = msgin->get_uint32();
|
uint32_t Sync = msgin->get_uint32();
|
||||||
uint64_t BKEntityId = msgin->get_uint64();
|
uint64_t BKEntityId = msgin->get_uint64();
|
||||||
|
Dictionary msg;
|
||||||
|
msg["action"] = code;
|
||||||
|
#ifdef DEBUG_ENABLED
|
||||||
|
msg["action_debug"] = "ACTION_SYNC_CODE";
|
||||||
|
#endif
|
||||||
|
msg["Sync"] = Sync;
|
||||||
|
msg["BKEntityId"] = BKEntityId;
|
||||||
|
data->_server_messages.push_back(msg);
|
||||||
DBG_PRINT("ACTION_SYNC_CODE Sync:" + uitos(Sync) + " BKEntityId:" + uitos(BKEntityId));
|
DBG_PRINT("ACTION_SYNC_CODE Sync:" + uitos(Sync) + " BKEntityId:" + uitos(BKEntityId));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIONCODE::ACTION_DISCONNECTION_CODE:
|
case Action::CODE::ACTION_DISCONNECTION_CODE:
|
||||||
{
|
{
|
||||||
// khanat-opennel-code/code/ryzom/common/src/game_share/action_disconnection.h
|
// khanat-opennel-code/code/ryzom/common/src/game_share/action_disconnection.h
|
||||||
// No data
|
// No data
|
||||||
DBG_PRINT("ACTION_DISCONNECTION_CODE");
|
DBG_PRINT("ACTION_DISCONNECTION_CODE");
|
||||||
|
Dictionary msg;
|
||||||
|
msg["action"] = code;
|
||||||
|
#ifdef DEBUG_ENABLED
|
||||||
|
msg["action_debug"] = "ACTION_DISCONNECTION_CODE";
|
||||||
|
#endif
|
||||||
|
data->_server_messages.push_back(msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIONCODE::ACTION_ASSOCIATION_CODE:
|
case Action::CODE::ACTION_ASSOCIATION_CODE:
|
||||||
{
|
{
|
||||||
DBG_PRINT("ACTION_ASSOCIATION_CODE");
|
|
||||||
// khanat-opennel-code/code/ryzom/common/src/game_share/action_association.h virtual void unpack (NLMISC::CBitMemStream &message)
|
// khanat-opennel-code/code/ryzom/common/src/game_share/action_association.h virtual void unpack (NLMISC::CBitMemStream &message)
|
||||||
// IsNewAssociation ( bool / 1 bit )
|
// IsNewAssociation ( bool / 1 bit )
|
||||||
// if IsNewAssociation is true:
|
// if IsNewAssociation is true:
|
||||||
// SheetId ( 32 bits unsigned )
|
// SheetId ( 32 bits unsigned )
|
||||||
// Replace ( bool / 1 bit )
|
// Replace ( bool / 1 bit )
|
||||||
|
DBG_PRINT("ACTION_ASSOCIATION_CODE");
|
||||||
uint32_t SheetId = msgin->get_uint32();
|
uint32_t SheetId = msgin->get_uint32();
|
||||||
bool Replace = msgin->get_bool();
|
bool Replace = msgin->get_bool();
|
||||||
|
Dictionary msg;
|
||||||
|
msg["action"] = code;
|
||||||
|
#ifdef DEBUG_ENABLED
|
||||||
|
msg["action_debug"] = "ACTION_ASSOCIATION_CODE";
|
||||||
|
#endif
|
||||||
|
msg["SheetId"] = SheetId;
|
||||||
|
msg["Replace"] = Replace;
|
||||||
|
data->_server_messages.push_back(msg);
|
||||||
DBG_PRINT("ACTION_ASSOCIATION_CODE SheetId:" + uitos(SheetId) + " Replace:" + uitos(Replace));
|
DBG_PRINT("ACTION_ASSOCIATION_CODE SheetId:" + uitos(SheetId) + " Replace:" + uitos(Replace));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIONCODE::ACTION_LOGIN_CODE:
|
case Action::CODE::ACTION_LOGIN_CODE:
|
||||||
{
|
{
|
||||||
DBG_PRINT("ACTION_LOGIN_CODE");
|
|
||||||
// khanat-opennel-code/code/ryzom/common/src/game_share/action_login.h virtual void unpack (NLMISC::CBitMemStream &message)
|
// khanat-opennel-code/code/ryzom/common/src/game_share/action_login.h virtual void unpack (NLMISC::CBitMemStream &message)
|
||||||
// ua ( 32 bits unsigned )
|
// ua ( 32 bits unsigned )
|
||||||
// uk ( 32 bits unsigned )
|
// uk ( 32 bits unsigned )
|
||||||
// ui ( 32 bits unsigned )
|
// ui ( 32 bits unsigned )
|
||||||
|
DBG_PRINT("ACTION_LOGIN_CODE");
|
||||||
uint32_t ua = msgin->get_uint32();
|
uint32_t ua = msgin->get_uint32();
|
||||||
uint32_t uk = msgin->get_uint32();
|
uint32_t uk = msgin->get_uint32();
|
||||||
uint32_t ui = msgin->get_uint32();
|
uint32_t ui = msgin->get_uint32();
|
||||||
|
Dictionary msg;
|
||||||
|
msg["action"] = code;
|
||||||
|
#ifdef DEBUG_ENABLED
|
||||||
|
msg["action_debug"] = "ACTION_LOGIN_CODE";
|
||||||
|
#endif
|
||||||
|
msg["ua"] = ua;
|
||||||
|
msg["uk"] = uk;
|
||||||
|
msg["ui"] = ui;
|
||||||
|
data->_server_messages.push_back(msg);
|
||||||
DBG_PRINT("ACTION_LOGIN_CODE ua:" + uitos(ua) + " uk:" + uitos(uk)+ " ui:" + uitos(ui));
|
DBG_PRINT("ACTION_LOGIN_CODE ua:" + uitos(ua) + " uk:" + uitos(uk)+ " ui:" + uitos(ui));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIONCODE::ACTION_TARGET_SLOT_CODE:
|
case Action::CODE::ACTION_TARGET_SLOT_CODE:
|
||||||
{
|
{
|
||||||
DBG_PRINT("ACTION_TARGET_SLOT_CODE");
|
|
||||||
// khanat-opennel-code/code/ryzom/common/src/game_share/action_target_slot.h virtual void unpack (NLMISC::CBitMemStream &message)
|
// khanat-opennel-code/code/ryzom/common/src/game_share/action_target_slot.h virtual void unpack (NLMISC::CBitMemStream &message)
|
||||||
// Slot ( 8 bits unsigned )
|
// Slot ( 8 bits unsigned )
|
||||||
// TargetOrPickup (2 bits unsigned)
|
// TargetOrPickup (2 bits unsigned)
|
||||||
|
DBG_PRINT("ACTION_TARGET_SLOT_CODE");
|
||||||
uint8_t Slot = msgin->get_uint8();
|
uint8_t Slot = msgin->get_uint8();
|
||||||
uint32_t TargetOrPickup = msgin->get_serial(2);
|
uint32_t TargetOrPickup = msgin->get_serial(2);
|
||||||
|
Dictionary msg;
|
||||||
|
msg["action"] = code;
|
||||||
|
#ifdef DEBUG_ENABLED
|
||||||
|
msg["action_debug"] = "ACTION_TARGET_SLOT_CODE";
|
||||||
|
#endif
|
||||||
|
msg["Slot"] = Slot;
|
||||||
|
msg["TargetOrPickup"] = TargetOrPickup;
|
||||||
|
data->_server_messages.push_back(msg);
|
||||||
DBG_PRINT("ACTION_TARGET_SLOT_CODE Slot:" + uitos(Slot) + " TargetOrPickup:" + uitos(TargetOrPickup));
|
DBG_PRINT("ACTION_TARGET_SLOT_CODE Slot:" + uitos(Slot) + " TargetOrPickup:" + uitos(TargetOrPickup));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTIONCODE::ACTION_DUMMY_CODE:
|
case Action::CODE::ACTION_DUMMY_CODE:
|
||||||
{
|
{
|
||||||
DBG_PRINT("ACTION_DUMMY_CODE");
|
|
||||||
// khanat-opennel-code/code/ryzom/common/src/game_share/action_dummy.h virtual void unpack (NLMISC::CBitMemStream &message)
|
// khanat-opennel-code/code/ryzom/common/src/game_share/action_dummy.h virtual void unpack (NLMISC::CBitMemStream &message)
|
||||||
// Dummy1 ( 32 bits unsigned )
|
// Dummy1 ( 32 bits unsigned )
|
||||||
// Dummy2 ( 32 bits unsigned )
|
// Dummy2 ( 32 bits unsigned )
|
||||||
|
DBG_PRINT("ACTION_DUMMY_CODE");
|
||||||
uint32_t Dummy1 = msgin->get_uint32();
|
uint32_t Dummy1 = msgin->get_uint32();
|
||||||
uint32_t Dummy2 = msgin->get_uint32();
|
uint32_t Dummy2 = msgin->get_uint32();
|
||||||
|
Dictionary msg;
|
||||||
|
msg["action"] = code;
|
||||||
|
#ifdef DEBUG_ENABLED
|
||||||
|
msg["action_debug"] = "ACTION_DUMMY_CODE";
|
||||||
|
#endif
|
||||||
|
msg["Dummy1"] = Dummy1;
|
||||||
|
msg["Dummy2"] = Dummy2;
|
||||||
|
data->_server_messages.push_back(msg);
|
||||||
DBG_PRINT("ACTION_DUMMY_CODE Dummy1:" + uitos(Dummy1) + " Dummy2:" + uitos(Dummy2));
|
DBG_PRINT("ACTION_DUMMY_CODE Dummy1:" + uitos(Dummy1) + " Dummy2:" + uitos(Dummy2));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1570,6 +1895,7 @@ void ActionFactory::decode(NetworkData * data, Ref<BitStream> msgin)
|
||||||
int channel;
|
int channel;
|
||||||
int num;
|
int num;
|
||||||
data->_last_received_ack = msgin->get_uint32();
|
data->_last_received_ack = msgin->get_uint32();
|
||||||
|
DBG_PRINT("last_received_ack:" + itos(data->_last_received_ack));
|
||||||
for( level=0 ; level < 3 ; ++level )
|
for( level=0 ; level < 3 ; ++level )
|
||||||
{
|
{
|
||||||
DBG_PRINT("level:" + itos(level));
|
DBG_PRINT("level:" + itos(level));
|
||||||
|
@ -1612,4 +1938,46 @@ void ActionFactory::decode(NetworkData * data, Ref<BitStream> msgin)
|
||||||
DBG_PRINT("next:" + itos(next));
|
DBG_PRINT("next:" + itos(next));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
clear_old_block(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionFactory::clear_old_block(NetworkData * data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = data->_block.size();
|
||||||
|
while(i>0)
|
||||||
|
{
|
||||||
|
i--;
|
||||||
|
Variant value = data->_block_used.get_value_at_index(i);
|
||||||
|
Variant key = data->_block_used.get_key_at_index(i);
|
||||||
|
int used = data->_block_used[key];
|
||||||
|
if ( used >= 2 )
|
||||||
|
{
|
||||||
|
used --;
|
||||||
|
data->_block_used[key] = used;
|
||||||
|
}
|
||||||
|
else if ( used > 0 )
|
||||||
|
{
|
||||||
|
data->_block_used.erase(key);
|
||||||
|
data->_block.erase(key);
|
||||||
|
DBG_PRINT("Remove block - key:" + String(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionFactory::clear_all_block(NetworkData * data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
DBG_PRINT("Remove all block");
|
||||||
|
i = data->_block.size();
|
||||||
|
while(i>0)
|
||||||
|
{
|
||||||
|
i--;
|
||||||
|
Variant key = data->_block_used.get_key_at_index(i);
|
||||||
|
data->_block_used.erase(key);
|
||||||
|
data->_block.erase(key);
|
||||||
|
DBG_PRINT("Remove block: key:" + String(key));
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -24,12 +24,20 @@
|
||||||
#include "core/object.h"
|
#include "core/object.h"
|
||||||
#include "modules/networkconnection/network_data.h"
|
#include "modules/networkconnection/network_data.h"
|
||||||
|
|
||||||
|
// 1840 bits= 230*8
|
||||||
|
#define MAX_IMPULSE_BIT_SIZE 1840
|
||||||
|
|
||||||
class ActionFactory
|
class ActionFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void decode_message(NetworkData * data, Ref<BitStream> msgin);
|
static void decode_message(NetworkData * data, Ref<BitStream> msgin);
|
||||||
void unpack(NetworkData * data, Ref<BitStream> msgin);
|
static void encode_message(Dictionary value, Ref<BitStream> msgout);
|
||||||
void decode(NetworkData * data, Ref<BitStream> msgin);
|
static void code(int code, Ref<BitStream> msgout);
|
||||||
|
static void pack(NetworkData * data);
|
||||||
|
static void unpack(NetworkData * data, Ref<BitStream> msgin);
|
||||||
|
static void decode(NetworkData * data, Ref<BitStream> msgin);
|
||||||
|
static void clear_old_block(NetworkData * data);
|
||||||
|
static void clear_all_block(NetworkData * data);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -3,10 +3,11 @@
|
||||||
#include "register_types.h"
|
#include "register_types.h"
|
||||||
|
|
||||||
#include "core/class_db.h"
|
#include "core/class_db.h"
|
||||||
#include "action_factory.h"
|
//#include "action_factory.h"
|
||||||
|
#include "action.h"
|
||||||
|
|
||||||
void register_action_types() {
|
void register_action_types() {
|
||||||
//ClassDB::register_class<ActionFactory>();
|
ClassDB::register_class<Action>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void unregister_action_types() {
|
void unregister_action_types() {
|
||||||
|
|
|
@ -21,6 +21,7 @@ Build :
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "modules/bitstream/bitstream.h"
|
#include "modules/bitstream/bitstream.h"
|
||||||
|
#include "modules/debug/debug.h"
|
||||||
|
|
||||||
// TODO - check if on godot we have a function or variable to get if processor is little_endian or not
|
// TODO - check if on godot we have a function or variable to get if processor is little_endian or not
|
||||||
bool little_endian = false;
|
bool little_endian = false;
|
||||||
|
@ -31,6 +32,7 @@ void BitStream::_bind_methods()
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("is_little_endian"), &BitStream::is_little_endian);
|
ClassDB::bind_method(D_METHOD("is_little_endian"), &BitStream::is_little_endian);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("complet_byte"), &BitStream::complet_byte);
|
||||||
ClassDB::bind_method(D_METHOD("size"), &BitStream::size);
|
ClassDB::bind_method(D_METHOD("size"), &BitStream::size);
|
||||||
ClassDB::bind_method(D_METHOD("size_data"), &BitStream::size_data);
|
ClassDB::bind_method(D_METHOD("size_data"), &BitStream::size_data);
|
||||||
ClassDB::bind_method(D_METHOD("number_bit_not_read"), &BitStream::number_bit_not_read);
|
ClassDB::bind_method(D_METHOD("number_bit_not_read"), &BitStream::number_bit_not_read);
|
||||||
|
@ -49,6 +51,7 @@ void BitStream::_bind_methods()
|
||||||
ClassDB::bind_method(D_METHOD("put_string", "value"), &BitStream::put_string);
|
ClassDB::bind_method(D_METHOD("put_string", "value"), &BitStream::put_string);
|
||||||
ClassDB::bind_method(D_METHOD("put_string_hexa32", "hexa"), &BitStream::put_string_hexa32);
|
ClassDB::bind_method(D_METHOD("put_string_hexa32", "hexa"), &BitStream::put_string_hexa32);
|
||||||
ClassDB::bind_method(D_METHOD("put_array_uint8", "value"), &BitStream::put_array_uint8);
|
ClassDB::bind_method(D_METHOD("put_array_uint8", "value"), &BitStream::put_array_uint8);
|
||||||
|
ClassDB::bind_method(D_METHOD("put_version", "value"), &BitStream::put_version);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("show"), &BitStream::show);
|
ClassDB::bind_method(D_METHOD("show"), &BitStream::show);
|
||||||
ClassDB::bind_method(D_METHOD("show_detail"), &BitStream::show_detail);
|
ClassDB::bind_method(D_METHOD("show_detail"), &BitStream::show_detail);
|
||||||
|
@ -67,7 +70,10 @@ void BitStream::_bind_methods()
|
||||||
ClassDB::bind_method(D_METHOD("get_uint32"), &BitStream::get_uint32);
|
ClassDB::bind_method(D_METHOD("get_uint32"), &BitStream::get_uint32);
|
||||||
ClassDB::bind_method(D_METHOD("get_sint64"), &BitStream::get_sint64);
|
ClassDB::bind_method(D_METHOD("get_sint64"), &BitStream::get_sint64);
|
||||||
ClassDB::bind_method(D_METHOD("get_uint64"), &BitStream::get_uint64);
|
ClassDB::bind_method(D_METHOD("get_uint64"), &BitStream::get_uint64);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_version", "value"), &BitStream::get_version);
|
||||||
ClassDB::bind_method(D_METHOD("get_array_uint8", "length"), &BitStream::get_array_uint8);
|
ClassDB::bind_method(D_METHOD("get_array_uint8", "length"), &BitStream::get_array_uint8);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_string"), &BitStream::get_string);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_ustring"), &BitStream::get_ustring);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BitStream::clear()
|
void BitStream::clear()
|
||||||
|
@ -100,17 +106,23 @@ bool BitStream::is_little_endian()
|
||||||
return little_endian;
|
return little_endian;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BitStream::size()
|
void BitStream::complet_byte()
|
||||||
|
{
|
||||||
|
// function to add 0 and have size multiple of 8 bit
|
||||||
|
this->_pos = ((this->_pos + 7) / 8) * 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t BitStream::size()
|
||||||
{
|
{
|
||||||
return (this->_pos + 7) / 8;
|
return (this->_pos + 7) / 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BitStream::size_data()
|
uint32_t BitStream::size_data()
|
||||||
{
|
{
|
||||||
return this->_pos;
|
return this->_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BitStream::number_bit_not_read()
|
uint32_t BitStream::number_bit_not_read()
|
||||||
{
|
{
|
||||||
return this->_pos - this->_read;
|
return this->_pos - this->_read;
|
||||||
}
|
}
|
||||||
|
@ -255,6 +267,60 @@ void BitStream::put_array_uint8(PoolByteArray value)
|
||||||
this->put_serial(value[i], 8);
|
this->put_serial(value[i], 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BitStream::put_bitstream(BitStream & value)
|
||||||
|
{
|
||||||
|
uint32_t last_read;
|
||||||
|
uint32_t nb;
|
||||||
|
last_read = value._read;
|
||||||
|
value._read = 0;
|
||||||
|
while ( value.number_bit_not_read() >= 32 )
|
||||||
|
put_uint32(value.get_uint32());
|
||||||
|
while ( value.number_bit_not_read() >= 16 )
|
||||||
|
put_uint16(value.get_uint16());
|
||||||
|
while ( value.number_bit_not_read() >= 8 )
|
||||||
|
put_uint8(value.get_uint8());
|
||||||
|
nb = value.number_bit_not_read();
|
||||||
|
if( nb > 0 )
|
||||||
|
put_serial(value.get_serial(nb), nb);
|
||||||
|
|
||||||
|
// restore pos read
|
||||||
|
value._read = last_read;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BitStream::put_bitstream(BitStream * value)
|
||||||
|
{
|
||||||
|
uint32_t last_read;
|
||||||
|
uint32_t nb;
|
||||||
|
last_read = value->_read;
|
||||||
|
value->_read = 0;
|
||||||
|
while ( value->number_bit_not_read() >= 32 )
|
||||||
|
put_uint32(value->get_uint32());
|
||||||
|
while ( value->number_bit_not_read() >= 16 )
|
||||||
|
put_uint16(value->get_uint16());
|
||||||
|
while ( value->number_bit_not_read() >= 8 )
|
||||||
|
put_uint8(value->get_uint8());
|
||||||
|
nb = value->number_bit_not_read();
|
||||||
|
if( nb > 0 )
|
||||||
|
put_serial(value->get_serial(nb), nb);
|
||||||
|
DBG_PRINT("put_bitstream: " + itos(nb) + " / " + itos(_pos));
|
||||||
|
|
||||||
|
// restore pos read
|
||||||
|
value->_read = last_read;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BitStream::put_version(uint32_t value)
|
||||||
|
{
|
||||||
|
if ( value < 255 ) // 0xff
|
||||||
|
{
|
||||||
|
this->put_uint8(value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->put_uint8(255);
|
||||||
|
this->put_uint32(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String BitStream::show()
|
String BitStream::show()
|
||||||
{
|
{
|
||||||
String ret;
|
String ret;
|
||||||
|
@ -308,7 +374,9 @@ String BitStream::show_detail()
|
||||||
while ( t > 0 )
|
while ( t > 0 )
|
||||||
{
|
{
|
||||||
const char c = '0' + ( t % 10 );
|
const char c = '0' + ( t % 10 );
|
||||||
strsize = String(&c) + strsize;
|
CharString tmp ;
|
||||||
|
tmp += c;
|
||||||
|
strsize = tmp + strsize;
|
||||||
t /= 10;
|
t /= 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,11 +386,13 @@ String BitStream::show_detail()
|
||||||
while ( t > 0 )
|
while ( t > 0 )
|
||||||
{
|
{
|
||||||
const char c = '0' + ( t % 10 );
|
const char c = '0' + ( t % 10 );
|
||||||
strpos = String(&c) + strpos;
|
CharString tmp ;
|
||||||
|
tmp += c;
|
||||||
|
strpos = tmp + strpos;
|
||||||
t /= 10;
|
t /= 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "[size:" + strsize + ", pos:" + strpos + "]" + ret ;
|
return "[size:" + String(strsize) + ", pos:" + String(strpos) + "]" + ret ;
|
||||||
}
|
}
|
||||||
|
|
||||||
String BitStream::show_counter()
|
String BitStream::show_counter()
|
||||||
|
@ -466,14 +536,32 @@ uint64_t BitStream::get_uint64()
|
||||||
return (v1 << 32) | v2;
|
return (v1 << 32) | v2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t BitStream::get_version()
|
||||||
|
{
|
||||||
|
uint32_t ret;
|
||||||
|
ret = this->get_uint8();
|
||||||
|
if ( ret == 255 ) // 0xff
|
||||||
|
{
|
||||||
|
ret = this->get_uint32();
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
PoolByteArray BitStream::get_array_uint8(uint32_t length)
|
PoolByteArray BitStream::get_array_uint8(uint32_t length)
|
||||||
{
|
{
|
||||||
PoolByteArray ret;
|
PoolByteArray ret;
|
||||||
while(length != 0)
|
while(length > 0)
|
||||||
{
|
{
|
||||||
ret.append(this->get_serial(8));
|
ret.append(this->get_serial(8));
|
||||||
--length;
|
--length;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
if (length == 1)
|
||||||
|
{
|
||||||
|
int nb = this->number_bit_not_read();
|
||||||
|
ret.append(this->get_serial(nb));
|
||||||
|
}
|
||||||
|
*/
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -487,3 +575,47 @@ BitStream BitStream::get_bitstream(uint32_t length)
|
||||||
}
|
}
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String BitStream::get_string()
|
||||||
|
{
|
||||||
|
String ret;
|
||||||
|
uint32_t size = this->get_uint32();
|
||||||
|
union S {
|
||||||
|
uint8_t v;
|
||||||
|
char c;
|
||||||
|
};
|
||||||
|
|
||||||
|
while(size > 0)
|
||||||
|
{
|
||||||
|
S x;
|
||||||
|
x.v = this->get_uint8();
|
||||||
|
CharString cs;
|
||||||
|
cs += x.c;
|
||||||
|
ret += cs;
|
||||||
|
--size;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
String BitStream::get_ustring()
|
||||||
|
{
|
||||||
|
// Read Utf-16
|
||||||
|
String ret;
|
||||||
|
uint32_t size = this->get_uint32();
|
||||||
|
union S {
|
||||||
|
uint16_t v;
|
||||||
|
char c[2];
|
||||||
|
};
|
||||||
|
|
||||||
|
while(size > 0)
|
||||||
|
{
|
||||||
|
S x;
|
||||||
|
x.v = this->get_uint16();
|
||||||
|
CharString cs;
|
||||||
|
cs += x.c[0];
|
||||||
|
cs += x.c[1];
|
||||||
|
ret += cs;
|
||||||
|
--size;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
|
@ -40,9 +40,11 @@ public:
|
||||||
|
|
||||||
bool is_little_endian();
|
bool is_little_endian();
|
||||||
|
|
||||||
int size();
|
void complet_byte();
|
||||||
int size_data();
|
|
||||||
int number_bit_not_read();
|
uint32_t size();
|
||||||
|
uint32_t size_data();
|
||||||
|
uint32_t number_bit_not_read();
|
||||||
|
|
||||||
void put_serial(uint32_t value, uint32_t nbits);
|
void put_serial(uint32_t value, uint32_t nbits);
|
||||||
void put_bool(bool value);
|
void put_bool(bool value);
|
||||||
|
@ -58,6 +60,9 @@ public:
|
||||||
void put_char(String value);
|
void put_char(String value);
|
||||||
void put_string(String value);
|
void put_string(String value);
|
||||||
void put_array_uint8(PoolByteArray value);
|
void put_array_uint8(PoolByteArray value);
|
||||||
|
void put_bitstream(BitStream & value);
|
||||||
|
void put_bitstream(BitStream * value);
|
||||||
|
void put_version(uint32_t value);
|
||||||
|
|
||||||
String show();
|
String show();
|
||||||
String show_detail();
|
String show_detail();
|
||||||
|
@ -79,8 +84,11 @@ public:
|
||||||
uint32_t get_uint32();
|
uint32_t get_uint32();
|
||||||
int64_t get_sint64();
|
int64_t get_sint64();
|
||||||
uint64_t get_uint64();
|
uint64_t get_uint64();
|
||||||
|
uint32_t get_version();
|
||||||
PoolByteArray get_array_uint8(uint32_t length);
|
PoolByteArray get_array_uint8(uint32_t length);
|
||||||
BitStream get_bitstream(uint32_t length);
|
BitStream get_bitstream(uint32_t length);
|
||||||
|
String get_string();
|
||||||
|
String get_ustring();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -31,6 +31,7 @@ void NetworkConnection::_bind_methods()
|
||||||
ClassDB::bind_method(D_METHOD("process", "delta"), &NetworkConnection::process);
|
ClassDB::bind_method(D_METHOD("process", "delta"), &NetworkConnection::process);
|
||||||
ClassDB::bind_method(D_METHOD("get_state"), &NetworkConnection::get_state);
|
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("connect_to_server"), &NetworkConnection::connect_to_server);
|
||||||
|
ClassDB::bind_method(D_METHOD("put_command"), &NetworkConnection::put_command);
|
||||||
ClassDB::bind_method(D_METHOD("get_server_messages"), &NetworkConnection::get_server_messages);
|
ClassDB::bind_method(D_METHOD("get_server_messages"), &NetworkConnection::get_server_messages);
|
||||||
ClassDB::bind_method(D_METHOD("get_server_tick"), &NetworkConnection::get_server_tick);
|
ClassDB::bind_method(D_METHOD("get_server_tick"), &NetworkConnection::get_server_tick);
|
||||||
ClassDB::bind_method(D_METHOD("terminate_network_connection"), &NetworkConnection::terminate_network_connection);
|
ClassDB::bind_method(D_METHOD("terminate_network_connection"), &NetworkConnection::terminate_network_connection);
|
||||||
|
@ -92,6 +93,11 @@ MessageDescriptionNode & NetworkConnection::get_master_message_description_node(
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
void NetworkConnection::put_command(Variant command)
|
||||||
|
{
|
||||||
|
NetworkConnectionCore::get_singleton()->put_command(command);
|
||||||
|
}
|
||||||
|
|
||||||
Variant NetworkConnection::get_server_messages()
|
Variant NetworkConnection::get_server_messages()
|
||||||
{
|
{
|
||||||
return NetworkConnectionCore::get_singleton()->get_server_messages();
|
return NetworkConnectionCore::get_singleton()->get_server_messages();
|
||||||
|
|
|
@ -45,6 +45,8 @@ public:
|
||||||
void process(int delta);
|
void process(int delta);
|
||||||
int get_state();
|
int get_state();
|
||||||
|
|
||||||
|
void put_command(Variant command);
|
||||||
|
|
||||||
Variant get_server_messages();
|
Variant get_server_messages();
|
||||||
Variant get_server_tick();
|
Variant get_server_tick();
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "check_memory.h"
|
#include "check_memory.h"
|
||||||
#include "network_connection_core.h"
|
#include "network_connection_core.h"
|
||||||
|
#include "modules/action/action_factory.h"
|
||||||
#include "modules/debug/debug.h"
|
#include "modules/debug/debug.h"
|
||||||
|
|
||||||
NetworkConnectionCore *NetworkConnectionCore::singleton = nullptr;
|
NetworkConnectionCore *NetworkConnectionCore::singleton = nullptr;
|
||||||
|
@ -200,6 +201,11 @@ void NetworkConnectionCore::process(int delta)
|
||||||
this->_state_connexion->send_message();
|
this->_state_connexion->send_message();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetworkConnectionCore::put_command(Variant command)
|
||||||
|
{
|
||||||
|
_network_data._command_to_send.append(command);
|
||||||
|
}
|
||||||
|
|
||||||
Variant NetworkConnectionCore::get_server_messages()
|
Variant NetworkConnectionCore::get_server_messages()
|
||||||
{
|
{
|
||||||
return _network_data._server_messages;
|
return _network_data._server_messages;
|
||||||
|
@ -223,6 +229,7 @@ void NetworkConnectionCore::terminate_connexion()
|
||||||
if ( NetworkConnectionCore::singleton == nullptr )
|
if ( NetworkConnectionCore::singleton == nullptr )
|
||||||
return;
|
return;
|
||||||
DBG_PRINT("Terminate network connexion ..");
|
DBG_PRINT("Terminate network connexion ..");
|
||||||
|
ActionFactory::clear_all_block(& NetworkConnectionCore::get_singleton()->_network_data);
|
||||||
delete NetworkConnectionCore::singleton;
|
delete NetworkConnectionCore::singleton;
|
||||||
NetworkConnectionCore::singleton = nullptr;
|
NetworkConnectionCore::singleton = nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,8 @@ public:
|
||||||
void process(int delta);
|
void process(int delta);
|
||||||
bool connected();
|
bool connected();
|
||||||
|
|
||||||
|
void put_command(Variant command);
|
||||||
|
|
||||||
Variant get_server_messages();
|
Variant get_server_messages();
|
||||||
Variant get_server_tick();
|
Variant get_server_tick();
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,8 @@ void NetworkData::initialize()
|
||||||
this->_client_sync = 0;
|
this->_client_sync = 0;
|
||||||
|
|
||||||
this->_current_send_number = 0;
|
this->_current_send_number = 0;
|
||||||
|
|
||||||
|
this->_impulse_multi_part_number = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkData::reset_last_ack()
|
void NetworkData::reset_last_ack()
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "core/reference.h"
|
#include "core/reference.h"
|
||||||
#include "modules/bitset/bitset.h"
|
#include "modules/bitset/bitset.h"
|
||||||
#include "core/ustring.h"
|
#include "core/ustring.h"
|
||||||
//#include "core/dictionary.h"
|
#include "core/dictionary.h"
|
||||||
#include "core/array.h"
|
#include "core/array.h"
|
||||||
|
|
||||||
//define MAX_LOOP_READ_BY_STEP 10
|
//define MAX_LOOP_READ_BY_STEP 10
|
||||||
|
@ -73,9 +73,16 @@ public:
|
||||||
uint32_t _last_ack_1[2];
|
uint32_t _last_ack_1[2];
|
||||||
uint32_t _last_ack_2[4];
|
uint32_t _last_ack_2[4];
|
||||||
|
|
||||||
//Dictionary _server_messages;
|
Array _server_messages; // Array contains all messages we received (from server)
|
||||||
Array _server_messages;
|
|
||||||
|
|
||||||
|
// Manage GENERIC_MULTI_PART_CODE
|
||||||
|
Dictionary _block;
|
||||||
|
Dictionary _block_used; // true if we red this block
|
||||||
|
|
||||||
|
//
|
||||||
|
Array _client_messages; // Array contains all messages we will send
|
||||||
|
Array _command_to_send; // Array all command to send (all data will be send to _client_messages)
|
||||||
|
uint8_t _impulse_multi_part_number;
|
||||||
|
|
||||||
NetworkData();
|
NetworkData();
|
||||||
~NetworkData();
|
~NetworkData();
|
||||||
|
|
|
@ -103,24 +103,27 @@ void StateConnectionNotInitialized::connect_to_server()
|
||||||
*/
|
*/
|
||||||
void StateConnectionLogin::send_system_quit()
|
void StateConnectionLogin::send_system_quit()
|
||||||
{
|
{
|
||||||
DBG_PRINT("send quit to server");
|
DBG_PRINT("send quit to server msg:" + itos(this->_data->_current_send_number));
|
||||||
BitStream msgout;
|
BitStream msgout;
|
||||||
msgout.put_uint32(this->_data->_current_received_number);
|
msgout.put_uint32(this->_data->_current_send_number);
|
||||||
msgout.put_bool(true);
|
msgout.put_bool(true);
|
||||||
msgout.put_uint8(CLFECOMMON::SYSTEM_QUIT_CODE);
|
msgout.put_uint8(CLFECOMMON::SYSTEM_QUIT_CODE);
|
||||||
msgout.put_sint32(this->_data->_quit_id);
|
msgout.put_sint32(this->_data->_quit_id);
|
||||||
|
|
||||||
|
DBG_PRINT("Send msg:" + itos(this->_data->_current_send_number) + " - " + msgout.show_detail());
|
||||||
if ( this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK )
|
if ( this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK )
|
||||||
{
|
{
|
||||||
ERR_PRINT("Error to send disconnect");
|
ERR_PRINT("Error to send disconnect");
|
||||||
}
|
}
|
||||||
this->_network->_state_connexion = & this->_network->_state_quit;
|
this->_network->_state_connexion = & this->_network->_state_quit;
|
||||||
|
this->_data->_current_send_number ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StateConnectionLogin::send_message()
|
void StateConnectionLogin::send_message()
|
||||||
{
|
{
|
||||||
BitStream msgout;
|
BitStream msgout;
|
||||||
msgout.put_uint32(this->_data->_current_received_number);
|
DBG_PRINT("Send quit to server msg:" + itos(this->_data->_current_send_number));
|
||||||
|
msgout.put_uint32(this->_data->_current_send_number);
|
||||||
msgout.put_bool(true);
|
msgout.put_bool(true);
|
||||||
msgout.put_uint8(CLFECOMMON::SYSTEM_LOGIN_CODE);
|
msgout.put_uint8(CLFECOMMON::SYSTEM_LOGIN_CODE);
|
||||||
msgout.put_string_hexa32(this->_data->_user_addr);
|
msgout.put_string_hexa32(this->_data->_user_addr);
|
||||||
|
@ -128,6 +131,7 @@ void StateConnectionLogin::send_message()
|
||||||
msgout.put_string_hexa32(this->_data->_user_id);
|
msgout.put_string_hexa32(this->_data->_user_id);
|
||||||
msgout.put_string(this->_data->_lang);
|
msgout.put_string(this->_data->_lang);
|
||||||
Error ret;
|
Error ret;
|
||||||
|
DBG_PRINT("Send msg:" + itos(this->_data->_current_send_number) + " - " + msgout.show_detail());
|
||||||
ret = this->_network->_socketUDP->put_packet_buffer(msgout.get_data()); // , msgout.get_data().size()
|
ret = this->_network->_socketUDP->put_packet_buffer(msgout.get_data()); // , msgout.get_data().size()
|
||||||
if ( ret != Error::OK)
|
if ( ret != Error::OK)
|
||||||
{
|
{
|
||||||
|
@ -143,6 +147,7 @@ void StateConnectionLogin::send_message()
|
||||||
}
|
}
|
||||||
DBG_PRINT("Connected to khganat");
|
DBG_PRINT("Connected to khganat");
|
||||||
this->_network->_state_connexion = & this->_network->_state_synchronize;
|
this->_network->_state_connexion = & this->_network->_state_synchronize;
|
||||||
|
this->_data->_current_send_number ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -151,32 +156,35 @@ void StateConnectionLogin::send_message()
|
||||||
|
|
||||||
void StateConnectionSynchronize::send_system_quit()
|
void StateConnectionSynchronize::send_system_quit()
|
||||||
{
|
{
|
||||||
DBG_PRINT("Send quit to server");
|
DBG_PRINT("Send quit to server msg:" + itos(this->_data->_current_send_number));
|
||||||
BitStream msgout;
|
BitStream msgout;
|
||||||
msgout.put_uint32(this->_data->_current_received_number);
|
msgout.put_uint32(this->_data->_current_send_number);
|
||||||
msgout.put_bool(true);
|
msgout.put_bool(true);
|
||||||
msgout.put_uint8(CLFECOMMON::SYSTEM_QUIT_CODE);
|
msgout.put_uint8(CLFECOMMON::SYSTEM_QUIT_CODE);
|
||||||
msgout.put_sint32(this->_data->_quit_id);
|
msgout.put_sint32(this->_data->_quit_id);
|
||||||
|
|
||||||
|
DBG_PRINT("Send msg:" + itos(this->_data->_current_send_number) + " - " + msgout.show_detail());
|
||||||
if ( this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK )
|
if ( this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK )
|
||||||
{
|
{
|
||||||
ERR_PRINT("Error to send quit");
|
ERR_PRINT("Error to send quit");
|
||||||
}
|
}
|
||||||
this->_network->_state_connexion = & this->_network->_state_quit;
|
this->_network->_state_connexion = & this->_network->_state_quit;
|
||||||
|
this->_data->_current_send_number ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StateConnectionSynchronize::send_system_ack_sync()
|
void StateConnectionSynchronize::send_system_ack_sync()
|
||||||
{
|
{
|
||||||
DBG_PRINT("Send system ACK Sync to server");
|
DBG_PRINT("Send system ACK Sync to server msg:" + itos(this->_data->_current_send_number));
|
||||||
Ref<BitStream> msgout;
|
Ref<BitStream> msgout;
|
||||||
msgout.instance();
|
msgout.instance();
|
||||||
msgout->put_uint32(this->_data->_current_received_number);
|
msgout->put_uint32(this->_data->_current_send_number);
|
||||||
msgout->put_bool(true);
|
msgout->put_bool(true);
|
||||||
msgout->put_uint8(CLFECOMMON::SYSTEM_ACK_SYNC_CODE);
|
msgout->put_uint8(CLFECOMMON::SYSTEM_ACK_SYNC_CODE);
|
||||||
msgout->put_sint32(this->_data->_last_received_number);
|
msgout->put_sint32(this->_data->_last_received_number);
|
||||||
msgout->put_sint32(this->_data->_last_ack_in_long_ack);
|
msgout->put_sint32(this->_data->_last_ack_in_long_ack);
|
||||||
this->_data->_long_ack_bit_field.write_serial(msgout);
|
this->_data->_long_ack_bit_field.write_serial(msgout);
|
||||||
msgout->put_sint32(this->_data->_server_sync);
|
msgout->put_sint32(this->_data->_server_sync);
|
||||||
|
DBG_PRINT("Send msg:" + itos(this->_data->_current_send_number) + " - " + msgout->show_detail());
|
||||||
if (this->_network->_socketUDP->put_packet_buffer(msgout->get_data()) != Error::OK)
|
if (this->_network->_socketUDP->put_packet_buffer(msgout->get_data()) != Error::OK)
|
||||||
{
|
{
|
||||||
ERR_PRINT("Error to send ack sync");
|
ERR_PRINT("Error to send ack sync");
|
||||||
|
@ -185,6 +193,7 @@ void StateConnectionSynchronize::send_system_ack_sync()
|
||||||
msgout.unref();
|
msgout.unref();
|
||||||
this->_data->_client_sync = this->_data->_server_sync;
|
this->_data->_client_sync = this->_data->_server_sync;
|
||||||
this->_network->_state_connexion = & this->_network->_state_connected;
|
this->_network->_state_connexion = & this->_network->_state_connected;
|
||||||
|
this->_data->_current_send_number ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StateConnectionSynchronize::receive_system_sync(Ref<BitStream> msgin)
|
void StateConnectionSynchronize::receive_system_sync(Ref<BitStream> msgin)
|
||||||
|
@ -289,29 +298,32 @@ void StateConnectionSynchronize::send_message()
|
||||||
|
|
||||||
void StateConnectionConnected::send_system_quit()
|
void StateConnectionConnected::send_system_quit()
|
||||||
{
|
{
|
||||||
DBG_PRINT("Send quit to server");
|
DBG_PRINT("Send quit to server msg:" + itos(this->_data->_current_send_number));
|
||||||
BitStream msgout;
|
BitStream msgout;
|
||||||
msgout.put_uint32(this->_data->_current_received_number);
|
msgout.put_uint32(this->_data->_current_send_number);
|
||||||
msgout.put_bool(true);
|
msgout.put_bool(true);
|
||||||
msgout.put_uint8(CLFECOMMON::SYSTEM_QUIT_CODE);
|
msgout.put_uint8(CLFECOMMON::SYSTEM_QUIT_CODE);
|
||||||
msgout.put_sint32(this->_data->_quit_id);
|
msgout.put_sint32(this->_data->_quit_id);
|
||||||
|
|
||||||
|
DBG_PRINT("Send msg:" + itos(this->_data->_current_send_number) + " - " + msgout.show_detail());
|
||||||
if ( this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK )
|
if ( this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK )
|
||||||
{
|
{
|
||||||
ERR_PRINT("Error to send disconnect");
|
ERR_PRINT("Error to send disconnect");
|
||||||
}
|
}
|
||||||
this->_network->_state_connexion = & this->_network->_state_quit;
|
this->_network->_state_connexion = & this->_network->_state_quit;
|
||||||
|
this->_data->_current_send_number ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StateConnectionConnected::send_system_disconnect()
|
void StateConnectionConnected::send_system_disconnect()
|
||||||
{
|
{
|
||||||
//if ( this->_state != STATE::Connected && this->_state != STATE::ForceSynchronize ) return;
|
//if ( this->_state != STATE::Connected && this->_state != STATE::ForceSynchronize ) return;
|
||||||
DBG_PRINT("Send disconnect to server");
|
DBG_PRINT("Send disconnect to server msg:" + itos(this->_data->_current_send_number));
|
||||||
BitStream msgout;
|
BitStream msgout;
|
||||||
msgout.put_uint32(this->_data->_current_received_number);
|
msgout.put_uint32(this->_data->_current_send_number);
|
||||||
msgout.put_bool(true);
|
msgout.put_bool(true);
|
||||||
msgout.put_uint8(CLFECOMMON::SYSTEM_DISCONNECTION_CODE);
|
msgout.put_uint8(CLFECOMMON::SYSTEM_DISCONNECTION_CODE);
|
||||||
|
|
||||||
|
DBG_PRINT("Send msg:" + itos(this->_data->_current_send_number) + " - " + msgout.show_detail());
|
||||||
if ( this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK )
|
if ( this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK )
|
||||||
{
|
{
|
||||||
ERR_PRINT("Error to send disconnect");
|
ERR_PRINT("Error to send disconnect");
|
||||||
|
@ -319,15 +331,15 @@ void StateConnectionConnected::send_system_disconnect()
|
||||||
this->_network->_socketUDP->close();
|
this->_network->_socketUDP->close();
|
||||||
// this->_state = STATE::Disconnect;
|
// this->_state = STATE::Disconnect;
|
||||||
this->_network->_state_connexion = & this->_network->_state_not_initialized;
|
this->_network->_state_connexion = & this->_network->_state_not_initialized;
|
||||||
|
this->_data->_current_send_number ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StateConnectionConnected::send_system_ack_sync()
|
void StateConnectionConnected::send_system_ack_sync()
|
||||||
{
|
{
|
||||||
DBG_PRINT("Send system ACK Sync to server");
|
DBG_PRINT("Send system ACK Sync to server msg:" + itos(this->_data->_current_send_number));
|
||||||
|
|
||||||
Ref<BitStream> msgout;
|
Ref<BitStream> msgout;
|
||||||
msgout.instance();
|
msgout.instance();
|
||||||
msgout->put_uint32(this->_data->_current_received_number);
|
msgout->put_uint32(this->_data->_current_send_number);
|
||||||
msgout->put_bool(true);
|
msgout->put_bool(true);
|
||||||
msgout->put_uint8(CLFECOMMON::SYSTEM_ACK_SYNC_CODE);
|
msgout->put_uint8(CLFECOMMON::SYSTEM_ACK_SYNC_CODE);
|
||||||
msgout->put_sint32(this->_data->_last_received_number);
|
msgout->put_sint32(this->_data->_last_received_number);
|
||||||
|
@ -341,16 +353,17 @@ void StateConnectionConnected::send_system_ack_sync()
|
||||||
}
|
}
|
||||||
msgout.unref();
|
msgout.unref();
|
||||||
this->_data->_client_sync = this->_data->_server_sync;
|
this->_data->_client_sync = this->_data->_server_sync;
|
||||||
|
this->_data->_current_send_number ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StateConnectionConnected::send_system_ack_probe()
|
void StateConnectionConnected::send_system_ack_probe()
|
||||||
{
|
{
|
||||||
// khanat-opennel-code/code/ryzom/server/src/frontend_service/fe_receive_sub.cpp:1121 void CFeReceiveSub::handleReceivedMsg( CClientHost *clienthost )
|
// khanat-opennel-code/code/ryzom/server/src/frontend_service/fe_receive_sub.cpp:1121 void CFeReceiveSub::handleReceivedMsg( CClientHost *clienthost )
|
||||||
DBG_PRINT("Send system ACK PROBE to server");
|
DBG_PRINT("Send system ACK PROBE to server msg:" + itos(this->_data->_current_send_number));
|
||||||
int max = this->_data->_latest_probes.size() ;
|
int max = this->_data->_latest_probes.size() ;
|
||||||
|
|
||||||
BitStream msgout;
|
BitStream msgout;
|
||||||
msgout.put_uint32(this->_data->_current_received_number);
|
msgout.put_uint32(this->_data->_current_send_number);
|
||||||
msgout.put_bool(true);
|
msgout.put_bool(true);
|
||||||
msgout.put_uint8(CLFECOMMON::SYSTEM_ACK_PROBE_CODE);
|
msgout.put_uint8(CLFECOMMON::SYSTEM_ACK_PROBE_CODE);
|
||||||
msgout.put_sint32(max);
|
msgout.put_sint32(max);
|
||||||
|
@ -359,31 +372,62 @@ void StateConnectionConnected::send_system_ack_probe()
|
||||||
int data = this->_data->_latest_probes[i];
|
int data = this->_data->_latest_probes[i];
|
||||||
msgout.put_sint32(data);
|
msgout.put_sint32(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DBG_PRINT("Send msg:" + itos(this->_data->_current_send_number) + " - " + msgout.show_detail());
|
||||||
if (this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK)
|
if (this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK)
|
||||||
{
|
{
|
||||||
ERR_PRINT("Error to send disconnect");
|
ERR_PRINT("Error to send disconnect");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this->_data->_latest_probes.clear();
|
this->_data->_latest_probes.clear();
|
||||||
|
this->_data->_current_send_number ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StateConnectionConnected::send_system_ask_tick()
|
void StateConnectionConnected::send_normal_message()
|
||||||
{
|
{
|
||||||
// khanat-opennel-code/code/ryzom/client/src/network_connection.cpp # void CNetworkConnection::sendNormalMessage()
|
// khanat-opennel-code/code/ryzom/client/src/network_connection.cpp # void CNetworkConnection::sendNormalMessage()
|
||||||
DBG_PRINT("Send system ACK TICK");
|
DBG_PRINT("Send Normal Message msg:" + itos(this->_data->_current_send_number));
|
||||||
|
|
||||||
BitStream msgout;
|
BitStream msgout;
|
||||||
msgout.put_uint32(this->_data->_current_received_number);
|
msgout.put_uint32(this->_data->_current_send_number);
|
||||||
|
DBG_PRINT("msgout A:" + msgout.show_detail());
|
||||||
msgout.put_bool(false);
|
msgout.put_bool(false);
|
||||||
|
DBG_PRINT("msgout B:" + msgout.show_detail());
|
||||||
msgout.put_uint32(this->_data->_last_received_number);
|
msgout.put_uint32(this->_data->_last_received_number);
|
||||||
|
DBG_PRINT("msgout C:" + msgout.show_detail());
|
||||||
msgout.put_uint32(this->_data->_ack_bit_mask);
|
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));
|
DBG_PRINT("msgout D:" + msgout.show_detail());
|
||||||
|
/*
|
||||||
|
msgout.pushUint32(self.Cycle) // cycle = self._CurrentServerTick
|
||||||
|
numberActions = len(self.Actions)
|
||||||
|
msgout.pushUint8(numberActions)
|
||||||
|
*/
|
||||||
|
while( this->_data->_client_messages.size() > 0 )
|
||||||
|
{
|
||||||
|
DBG_PRINT("Send message");
|
||||||
|
msgout.put_uint32(this->_data->_current_server_tick);
|
||||||
|
DBG_PRINT("msgout E:" + msgout.show_detail());
|
||||||
|
msgout.put_uint8(1);
|
||||||
|
DBG_PRINT("msgout F:" + msgout.show_detail());
|
||||||
|
Ref<BitStream> tmp = this->_data->_client_messages.pop_front(); // PoolByteArray tmp = this->_data->_client_messages.pop_front();
|
||||||
|
//msgout.put_array_uint8(tmp); // TODO - Erreur de copie (changer le type)
|
||||||
|
msgout.put_bitstream(tmp.ptr()); /// ERREUR COPIE
|
||||||
|
DBG_PRINT("Send message " + msgout.show_detail());
|
||||||
|
if ( msgout.number_bit_not_read() > 3840 ) // 3840 = 480*8
|
||||||
|
break;
|
||||||
|
// break; // TODO - a supprimer pour l'instant on envoie qu'un paquet
|
||||||
|
}
|
||||||
|
DBG_PRINT("msgout G:" + msgout.show_detail());
|
||||||
|
|
||||||
|
DBG_PRINT("Send msg:" + itos(this->_data->_current_send_number) + " - " + msgout.show_detail());
|
||||||
|
DBG_PRINT("current_received_number:" + itos(this->_data->_current_send_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)
|
if (this->_network->_socketUDP->put_packet_buffer(msgout.get_data()) != Error::OK)
|
||||||
{
|
{
|
||||||
ERR_PRINT("Error to send disconnect");
|
ERR_PRINT("Error to send disconnect");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this->_data->_recieved_new_server_tick = false;
|
this->_data->_recieved_new_server_tick = false;
|
||||||
|
this->_data->_current_send_number ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StateConnectionConnected::receive_system_sync(Ref<BitStream> msgin)
|
void StateConnectionConnected::receive_system_sync(Ref<BitStream> msgin)
|
||||||
|
@ -500,12 +544,15 @@ void StateConnectionConnected::receive_message(int index)
|
||||||
|
|
||||||
void StateConnectionConnected::send_message()
|
void StateConnectionConnected::send_message()
|
||||||
{
|
{
|
||||||
|
ActionFactory::pack(this->_data);
|
||||||
if ( this->_data->_server_sync != this->_data->_client_sync )
|
if ( this->_data->_server_sync != this->_data->_client_sync )
|
||||||
this->send_system_ack_sync();
|
this->send_system_ack_sync();
|
||||||
else if (this->_data->_latest_probes.size() != 0 )
|
else if (this->_data->_latest_probes.size() != 0 )
|
||||||
this->send_system_ack_probe();
|
this->send_system_ack_probe();
|
||||||
else if (this->_data->_recieved_new_server_tick == true)
|
else if (this->_data->_recieved_new_server_tick == true)
|
||||||
this->send_system_ask_tick();
|
this->send_normal_message();
|
||||||
|
//else if (this->_data->_client_messages.size() > 0)
|
||||||
|
/// this->send_normal_message();
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "modules/bitset/bitset.h"
|
#include "modules/bitset/bitset.h"
|
||||||
#include "modules/bitstreamqueue/bitstreamqueue.h"
|
#include "modules/bitstreamqueue/bitstreamqueue.h"
|
||||||
#include "network_data.h"
|
#include "network_data.h"
|
||||||
|
#include "modules/action/action.h"
|
||||||
|
|
||||||
#define MAX_SIZE_BIT_STREAM_QUEUE 10
|
#define MAX_SIZE_BIT_STREAM_QUEUE 10
|
||||||
//define NUM_BITS_IN_LONG_ACK 512
|
//define NUM_BITS_IN_LONG_ACK 512
|
||||||
|
@ -58,21 +59,6 @@ enum CLFECOMMON {
|
||||||
NUMBITSINLONGACK = 512
|
NUMBITSINLONGACK = 512
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ACTIONCODE {
|
|
||||||
ACTION_POSITION_CODE = 0,
|
|
||||||
ACTION_GENERIC_CODE = 1,
|
|
||||||
ACTION_GENERIC_MULTI_PART_CODE = 2,
|
|
||||||
ACTION_SINT64 = 3,
|
|
||||||
ACTION_SYNC_CODE = 10,
|
|
||||||
ACTION_DISCONNECTION_CODE = 11,
|
|
||||||
ACTION_ASSOCIATION_CODE = 12,
|
|
||||||
ACTION_LOGIN_CODE = 13,
|
|
||||||
ACTION_TARGET_SLOT_CODE = 40,
|
|
||||||
ACTION_DUMMY_CODE = 99,
|
|
||||||
ACTION_NONE = 999
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class NetworkConnectionCore;
|
class NetworkConnectionCore;
|
||||||
|
|
||||||
// Virtual class reference for network state
|
// Virtual class reference for network state
|
||||||
|
@ -142,7 +128,7 @@ public:
|
||||||
void send_system_disconnect();
|
void send_system_disconnect();
|
||||||
void send_system_ack_sync();
|
void send_system_ack_sync();
|
||||||
void send_system_ack_probe();
|
void send_system_ack_probe();
|
||||||
void send_system_ask_tick();
|
void send_normal_message();
|
||||||
void receive_system_sync(Ref<BitStream> msgin);
|
void receive_system_sync(Ref<BitStream> msgin);
|
||||||
void receive_message(int index);
|
void receive_message(int index);
|
||||||
void send_message();
|
void send_message();
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
#include "referentialmessage.h"
|
#include "referentialmessage.h"
|
||||||
#include "core/os/os.h"
|
#include "core/os/os.h"
|
||||||
|
#include "modules/impulse/impulsebase.h"
|
||||||
|
|
||||||
void ReferentialMessage::_bind_methods()
|
void ReferentialMessage::_bind_methods()
|
||||||
{
|
{
|
||||||
|
@ -46,6 +47,11 @@ int ReferentialMessage::read_command(Ref<BitStream> msgin)
|
||||||
return ReferentialMessageCore::get_singleton()->read_command(msgin);
|
return ReferentialMessageCore::get_singleton()->read_command(msgin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ReferentialMessage::write_command(ImpulseBase::Impulse command, Ref<BitStream> msgout)
|
||||||
|
{
|
||||||
|
ReferentialMessageCore::get_singleton()->write_command(command, msgout);
|
||||||
|
}
|
||||||
|
|
||||||
void ReferentialMessage::clear_session()
|
void ReferentialMessage::clear_session()
|
||||||
{
|
{
|
||||||
ReferentialMessageCore::clear_session();
|
ReferentialMessageCore::clear_session();
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
//#include "core/dictionary.h"
|
//#include "core/dictionary.h"
|
||||||
//#include "modules/bitstream/bitstream.h"
|
//#include "modules/bitstream/bitstream.h"
|
||||||
#include "modules/referentialmessage/referentialmessagecore.h"
|
#include "modules/referentialmessage/referentialmessagecore.h"
|
||||||
|
#include "modules/impulse/impulsebase.h"
|
||||||
|
|
||||||
class ReferentialMessage : public Reference {
|
class ReferentialMessage : public Reference {
|
||||||
GDCLASS(ReferentialMessage, Reference)
|
GDCLASS(ReferentialMessage, Reference)
|
||||||
|
@ -38,7 +39,9 @@ public:
|
||||||
void _init() {};
|
void _init() {};
|
||||||
void read_referential(Dictionary dictionary_message);
|
void read_referential(Dictionary dictionary_message);
|
||||||
void show();
|
void show();
|
||||||
|
|
||||||
int read_command(Ref<BitStream> msgin);
|
int read_command(Ref<BitStream> msgin);
|
||||||
|
void write_command(ImpulseBase::Impulse command, Ref<BitStream> msgout);
|
||||||
|
|
||||||
void clear_session();
|
void clear_session();
|
||||||
};
|
};
|
||||||
|
|
|
@ -170,3 +170,15 @@ int ReferentialMessageCore::read_command(Ref<BitStream> msgin)
|
||||||
{
|
{
|
||||||
return _decoder->read_command(msgin);
|
return _decoder->read_command(msgin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ReferentialMessageCore::write_command(ImpulseBase::Impulse command, Ref<BitStream> msgout)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_ENABLED
|
||||||
|
if ( command >= ImpulseBase::Impulse::__LAST_ELEMENT )
|
||||||
|
{
|
||||||
|
ERR_PRINT("Out of range (" + itos(command) + " / " + itos(ImpulseBase::Impulse::__LAST_ELEMENT) + ")");
|
||||||
|
throw "Out of range";
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
msgout->put_bitstream(_encoder[command]);
|
||||||
|
}
|
|
@ -100,6 +100,7 @@ public:
|
||||||
|
|
||||||
static void clear_session();
|
static void clear_session();
|
||||||
int read_command(Ref<BitStream> msgin);
|
int read_command(Ref<BitStream> msgin);
|
||||||
|
void write_command(ImpulseBase::Impulse command, Ref<BitStream> msgout);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -8,9 +8,14 @@
|
||||||
|
|
||||||
config_version=4
|
config_version=4
|
||||||
|
|
||||||
_global_script_classes=[ ]
|
_global_script_classes=[ {
|
||||||
|
"base": "Reference",
|
||||||
|
"class": "string_manager",
|
||||||
|
"language": "GDScript",
|
||||||
|
"path": "res://assets/Scripts/Config/string_manager.gd"
|
||||||
|
} ]
|
||||||
_global_script_class_icons={
|
_global_script_class_icons={
|
||||||
|
"string_manager": ""
|
||||||
}
|
}
|
||||||
|
|
||||||
[application]
|
[application]
|
||||||
|
|
|
@ -4,87 +4,87 @@ signal return_pressed
|
||||||
signal font_changed( value )
|
signal font_changed( value )
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Fullscreen/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/fullscreen" )
|
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Fullscreen/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/fullscreen" )
|
||||||
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Borderless/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/borderless" )
|
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Borderless/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/borderless" )
|
||||||
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Resizable/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/resizable" )
|
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/Resizable/CheckBox.pressed = ProjectSettings.get_setting( "display/window/size/resizable" )
|
||||||
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/CurrentScreen/SpinBox.value = OS.current_screen
|
$Menus/TabContainer/Display/ScrollContainer/VBoxContainer/CurrentScreen/SpinBox.value = OS.current_screen
|
||||||
|
|
||||||
load_settings()
|
load_settings()
|
||||||
|
|
||||||
|
|
||||||
func _on_font_size_bar_value_changed(value):
|
func _on_font_size_bar_value_changed(value):
|
||||||
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size/font_size_value.text = str( value )
|
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size/font_size_value.text = str( value )
|
||||||
$Menus.get_theme().default_font.size = value
|
$Menus.get_theme().default_font.size = value
|
||||||
emit_signal( "font_changed", value )
|
emit_signal( "font_changed", value )
|
||||||
|
|
||||||
func load_settings():
|
func load_settings():
|
||||||
|
|
||||||
var config_file = ConfigFile.new()
|
var config_file = ConfigFile.new()
|
||||||
var err = config_file.load( "user://settings.cfg" )
|
var err = config_file.load( "user://settings.cfg" )
|
||||||
if err == ERR_CANT_OPEN or err == ERR_FILE_NOT_FOUND:
|
if err == ERR_CANT_OPEN or err == ERR_FILE_NOT_FOUND:
|
||||||
# On suppose que le fichier n'existe pas encore, donc on le crée.
|
# On suppose que le fichier n'existe pas encore, donc on le crée.
|
||||||
config_file.set_value( "theme", "font_size", 14 )
|
config_file.set_value( "theme", "font_size", 14 )
|
||||||
config_file.save( "user://settings.cfg" )
|
config_file.save( "user://settings.cfg" )
|
||||||
elif not err == OK:
|
elif not err == OK:
|
||||||
print("[res://scenes/GUI/Settings/Settings.gd:load_settings] Error code when loading config file: ", err)
|
print("[res://scenes/GUI/Settings/Settings.gd:load_settings] Error code when loading config file: ", err)
|
||||||
|
|
||||||
global.font_size = config_file.get_value( "theme", "font_size" )
|
global.font_size = config_file.get_value( "theme", "font_size" )
|
||||||
if $Menus.get_theme():
|
if $Menus.get_theme():
|
||||||
$Menus.get_theme().default_font.size = global.font_size
|
$Menus.get_theme().default_font.size = global.font_size
|
||||||
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size_bar.value = global.font_size
|
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size_bar.value = global.font_size
|
||||||
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size/font_size_value.text = str( global.font_size )
|
$Menus/TabContainer/Test/ScrollContainer/VBoxContainer/font_size/font_size_value.text = str( global.font_size )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _on_ReturnButton_pressed():
|
func _on_ReturnButton_pressed():
|
||||||
|
|
||||||
var config_file = ConfigFile.new()
|
var config_file = ConfigFile.new()
|
||||||
var err = config_file.load( "user://settings.cfg" )
|
var err = config_file.load( "user://settings.cfg" )
|
||||||
if err:
|
if err:
|
||||||
print("[res://scenes/GUI/Settings/Settings.gd:_on_ReturnButton_pressed] Error code when loading config file: ", err)
|
print("[res://scenes/GUI/Settings/Settings.gd:_on_ReturnButton_pressed] Error code when loading config file: ", err)
|
||||||
|
|
||||||
config_file.set_value("theme", "font_size", $Menus.get_theme().default_font.size)
|
config_file.set_value("theme", "font_size", $Menus.get_theme().default_font.size)
|
||||||
|
|
||||||
config_file.save( "user://settings.cfg" )
|
config_file.save( "user://settings.cfg" )
|
||||||
|
|
||||||
emit_signal( "return_pressed" )
|
emit_signal( "return_pressed" )
|
||||||
|
|
||||||
|
|
||||||
func _on_Title_text_changed(new_text):
|
func _on_Title_text_changed(new_text):
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
# Changing windows title
|
# Changing windows title
|
||||||
var new_title = "Khanat"
|
var new_title = "Khanat"
|
||||||
new_text = new_text.strip_edges()
|
new_text = new_text.strip_edges()
|
||||||
if not new_text == "":
|
if not new_text == "":
|
||||||
new_title = new_text
|
new_title = new_text
|
||||||
new_title += " (" + String(OS.get_window_size().x) + "x" + String(OS.get_window_size().y) + ")"
|
new_title += " (" + String(OS.get_window_size().x) + "x" + String(OS.get_window_size().y) + ")"
|
||||||
OS.set_window_title( new_title )
|
OS.set_window_title( new_title )
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
|
|
||||||
func _on_Fullscreen_toggled(button_pressed):
|
func _on_Fullscreen_toggled(button_pressed):
|
||||||
if ProjectSettings.has_setting( "display/window/size/fullscreen" ):
|
if ProjectSettings.has_setting( "display/window/size/fullscreen" ):
|
||||||
ProjectSettings.set_setting("display/window/size/fullscreen", button_pressed)
|
ProjectSettings.set_setting("display/window/size/fullscreen", button_pressed)
|
||||||
OS.window_fullscreen = ProjectSettings.get_setting("display/window/size/fullscreen")
|
OS.window_fullscreen = ProjectSettings.get_setting("display/window/size/fullscreen")
|
||||||
|
|
||||||
func _on_Borderless_toggled(button_pressed):
|
func _on_Borderless_toggled(button_pressed):
|
||||||
if ProjectSettings.has_setting( "display/window/size/borderless" ):
|
if ProjectSettings.has_setting( "display/window/size/borderless" ):
|
||||||
ProjectSettings.set_setting("display/window/size/borderless", button_pressed)
|
ProjectSettings.set_setting("display/window/size/borderless", button_pressed)
|
||||||
OS.window_borderless = ProjectSettings.get_setting("display/window/size/borderless")
|
OS.window_borderless = ProjectSettings.get_setting("display/window/size/borderless")
|
||||||
|
|
||||||
func _on_Resizable_toggled(button_pressed):
|
func _on_Resizable_toggled(button_pressed):
|
||||||
if ProjectSettings.has_setting( "display/window/size/resizable" ):
|
if ProjectSettings.has_setting( "display/window/size/resizable" ):
|
||||||
ProjectSettings.set_setting("display/window/size/resizable", button_pressed)
|
ProjectSettings.set_setting("display/window/size/resizable", button_pressed)
|
||||||
OS.window_resizable = ProjectSettings.get_setting("display/window/size/resizable")
|
OS.window_resizable = ProjectSettings.get_setting("display/window/size/resizable")
|
||||||
|
|
||||||
# La fonction existe dans la doc mais le moteur lui ne la reconnait pas,
|
# La fonction existe dans la doc mais le moteur lui ne la reconnait pas,
|
||||||
# soit il y a une subtilité quelquepart soit la doc n'est pas à jour.
|
# soit il y a une subtilité quelquepart soit la doc n'est pas à jour.
|
||||||
func _on_AlwaysOnTop_toggled(button_pressed):
|
func _on_AlwaysOnTop_toggled(button_pressed):
|
||||||
# OS.set_window_always_on_top( button_pressed )
|
# OS.set_window_always_on_top( button_pressed )
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func _on_SpinBox_value_changed(value):
|
func _on_SpinBox_value_changed(value):
|
||||||
OS.current_screen = value
|
OS.current_screen = value
|
||||||
|
|
||||||
|
|
||||||
func _on_FluteButton_pressed():
|
func _on_FluteButton_pressed():
|
||||||
pass # Replace with function body.
|
pass # Replace with function body.
|
||||||
|
|
|
@ -89,7 +89,6 @@ custom_styles/tab_bg = SubResource( 5 )
|
||||||
custom_styles/panel = SubResource( 6 )
|
custom_styles/panel = SubResource( 6 )
|
||||||
|
|
||||||
[node name="Display" type="MarginContainer" parent="Menus/TabContainer"]
|
[node name="Display" type="MarginContainer" parent="Menus/TabContainer"]
|
||||||
editor/display_folded = true
|
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
margin_top = 49.0
|
margin_top = 49.0
|
||||||
|
@ -112,7 +111,6 @@ size_flags_vertical = 2
|
||||||
custom_constants/separation = 8
|
custom_constants/separation = 8
|
||||||
|
|
||||||
[node name="Fullscreen" type="HBoxContainer" parent="Menus/TabContainer/Display/ScrollContainer/VBoxContainer"]
|
[node name="Fullscreen" type="HBoxContainer" parent="Menus/TabContainer/Display/ScrollContainer/VBoxContainer"]
|
||||||
editor/display_folded = true
|
|
||||||
margin_right = 1196.0
|
margin_right = 1196.0
|
||||||
margin_bottom = 41.0
|
margin_bottom = 41.0
|
||||||
|
|
||||||
|
@ -150,7 +148,6 @@ margin_bottom = 41.0
|
||||||
size_flags_horizontal = 2
|
size_flags_horizontal = 2
|
||||||
|
|
||||||
[node name="Resizable" type="HBoxContainer" parent="Menus/TabContainer/Display/ScrollContainer/VBoxContainer"]
|
[node name="Resizable" type="HBoxContainer" parent="Menus/TabContainer/Display/ScrollContainer/VBoxContainer"]
|
||||||
editor/display_folded = true
|
|
||||||
margin_top = 98.0
|
margin_top = 98.0
|
||||||
margin_right = 1196.0
|
margin_right = 1196.0
|
||||||
margin_bottom = 139.0
|
margin_bottom = 139.0
|
||||||
|
@ -278,7 +275,6 @@ margin_bottom = -1.0
|
||||||
hint_tooltip = "Interface."
|
hint_tooltip = "Interface."
|
||||||
|
|
||||||
[node name="Header" type="HBoxContainer" parent="Menus/TabContainer/Controles/ScrollContainer/TabContainer/Interface"]
|
[node name="Header" type="HBoxContainer" parent="Menus/TabContainer/Controles/ScrollContainer/TabContainer/Interface"]
|
||||||
editor/display_folded = true
|
|
||||||
margin_right = 1022.0
|
margin_right = 1022.0
|
||||||
margin_bottom = 38.0
|
margin_bottom = 38.0
|
||||||
|
|
||||||
|
@ -385,7 +381,6 @@ margin_right = -1.0
|
||||||
margin_bottom = -1.0
|
margin_bottom = -1.0
|
||||||
|
|
||||||
[node name="Header" type="HBoxContainer" parent="Menus/TabContainer/Controles/ScrollContainer/TabContainer/Deplacement"]
|
[node name="Header" type="HBoxContainer" parent="Menus/TabContainer/Controles/ScrollContainer/TabContainer/Deplacement"]
|
||||||
editor/display_folded = true
|
|
||||||
margin_right = 1022.0
|
margin_right = 1022.0
|
||||||
margin_bottom = 37.0
|
margin_bottom = 37.0
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue