mirror of
https://port.numenaute.org/aleajactaest/bazar_alea.git
synced 2024-09-19 19:20:34 +00:00
adding 1 step xmpp
This commit is contained in:
parent
93fc0f44b2
commit
d0508567f4
3 changed files with 121 additions and 0 deletions
|
@ -18,6 +18,7 @@ config/icon="res://icon.svg"
|
||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
Multi="*res://scenes/multi.gd"
|
Multi="*res://scenes/multi.gd"
|
||||||
|
Stream="*res://xmpp/stream.gd"
|
||||||
|
|
||||||
[input]
|
[input]
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,9 @@ func _ready():
|
||||||
Multi.update_my_position.connect(_on_update_me)
|
Multi.update_my_position.connect(_on_update_me)
|
||||||
Multi.update_player_position.connect(_on_update_player)
|
Multi.update_player_position.connect(_on_update_player)
|
||||||
Multi.remove_player.connect(_on_remove_player)
|
Multi.remove_player.connect(_on_remove_player)
|
||||||
|
Stream.set_server_ip("127.0.0.1")
|
||||||
|
Stream.server_ip = "127.0.0.1"
|
||||||
|
print(Stream.get_server_ip())
|
||||||
|
|
||||||
|
|
||||||
func _on_connexion_updated(new_state):
|
func _on_connexion_updated(new_state):
|
||||||
|
|
117
client/xmpp/stream.gd
Normal file
117
client/xmpp/stream.gd
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
# Stream XMPP
|
||||||
|
# Author : AleaJactaEst
|
||||||
|
#
|
||||||
|
# Based on https://invent.kde.org/woltherav/godot-xmpp-client.git <Wolthera van Hövell>
|
||||||
|
|
||||||
|
signal debug(message)
|
||||||
|
signal error(message)
|
||||||
|
signal new_stanza(stanza)
|
||||||
|
|
||||||
|
enum StreamState {
|
||||||
|
END, # Stream is over. Starting with this.
|
||||||
|
START, # Stream hass started.
|
||||||
|
TLS, # Connection has been made and the first header is send. Let's get ssl!
|
||||||
|
AUTHENTICATE, # We have negotiated whether to use TLS, let's authenticate.
|
||||||
|
STANZA # We have authenticated, account is now allowed to send stanzas
|
||||||
|
}
|
||||||
|
var stream_status = StreamState.END
|
||||||
|
|
||||||
|
@export var server_ip:String = "127.0.0.1":
|
||||||
|
set = set_server_ip, get = get_server_ip
|
||||||
|
|
||||||
|
func set_server_ip(value:String):
|
||||||
|
server_ip = value
|
||||||
|
|
||||||
|
func get_server_ip() -> String:
|
||||||
|
return server_ip
|
||||||
|
|
||||||
|
@export var port_number:int = 5222:
|
||||||
|
set = set_port_number, get = get_port_number
|
||||||
|
|
||||||
|
func set_port_number(value:int):
|
||||||
|
port_number = value
|
||||||
|
|
||||||
|
func get_port_number() -> int:
|
||||||
|
return port_number
|
||||||
|
|
||||||
|
@export var account_name:String = "undefined@localhost":
|
||||||
|
set = set_account_name, get = get_account_name
|
||||||
|
|
||||||
|
func set_account_name(value:String):
|
||||||
|
account_name = value
|
||||||
|
|
||||||
|
func get_account_name() -> String:
|
||||||
|
return account_name
|
||||||
|
|
||||||
|
@export var password:String = "undefined":
|
||||||
|
set = set_password, get = get_password
|
||||||
|
|
||||||
|
func set_password(value:String):
|
||||||
|
password = value
|
||||||
|
|
||||||
|
func get_password() -> String:
|
||||||
|
return password
|
||||||
|
|
||||||
|
@export var locale:String = "en":
|
||||||
|
set = set_locale, get = get_locale
|
||||||
|
|
||||||
|
func set_locale(value:String):
|
||||||
|
locale = value
|
||||||
|
|
||||||
|
func get_locale() -> String:
|
||||||
|
return locale
|
||||||
|
|
||||||
|
var count_connecting_time = 0
|
||||||
|
var partial_stanza:String = ""
|
||||||
|
var tcp_peer = StreamPeerTCP.new()
|
||||||
|
var status:StreamState = StreamState.END
|
||||||
|
|
||||||
|
func _init():
|
||||||
|
var language = OS.get_locale()
|
||||||
|
set_locale(language)
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
if (tcp_peer.get_status() == StreamPeerTCP.STATUS_CONNECTED) :
|
||||||
|
if (tcp_peer.has_method("poll")):
|
||||||
|
tcp_peer.poll()
|
||||||
|
if tcp_peer.get_available_bytes()>0:
|
||||||
|
var response = tcp_peer.get_string(tcp_peer.get_available_bytes())
|
||||||
|
debug.emit("Stream: response \n[color=red]"+response+"[/color]")
|
||||||
|
if stream_status == self.StreamState.STANZA:
|
||||||
|
collect_stanza(remove_stream_header(response))
|
||||||
|
else:
|
||||||
|
stream_process(remove_stream_header(response))
|
||||||
|
if tcp_peer.get_status() == StreamPeerTCP.STATUS_CONNECTING:
|
||||||
|
count_connecting_time += delta
|
||||||
|
if count_connecting_time > 1: # if it took more than 1s to connect, error
|
||||||
|
print("*** Stream: Stuck connecting, will now disconnect")
|
||||||
|
debug.emit("Stream: Stuck connecting, will now disconnect")
|
||||||
|
tcp_peer.disconnect_from_host() #interrupts connection to nothing
|
||||||
|
set_process(false) # stop listening for packets
|
||||||
|
|
||||||
|
|
||||||
|
func remove_stream_header(text :String) -> String:
|
||||||
|
var index = 0
|
||||||
|
if text.begins_with("<?") :
|
||||||
|
# Strip xml header
|
||||||
|
index = text.find("?>")
|
||||||
|
text = text.substr(index+2).strip_edges()
|
||||||
|
# strip stream header
|
||||||
|
var rg = RegEx.new()
|
||||||
|
rg.compile("<\\s?(stream|stream:stream)\\s")
|
||||||
|
var result = rg.search(text)
|
||||||
|
if result:
|
||||||
|
debug.emit("Stream: Response header received")
|
||||||
|
index = text.find(">", result.get_end())
|
||||||
|
text = text.substr(index+1)
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
func collect_stanza(text : String):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
func stream_process(response :String = ""):
|
||||||
|
pass
|
Loading…
Reference in a new issue