mirror of
https://port.numenaute.org/aleajactaest/bazar_alea.git
synced 2024-10-04 15:58:31 +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]
|
||||
|
||||
Multi="*res://scenes/multi.gd"
|
||||
Stream="*res://xmpp/stream.gd"
|
||||
|
||||
[input]
|
||||
|
||||
|
|
|
@ -22,6 +22,9 @@ func _ready():
|
|||
Multi.update_my_position.connect(_on_update_me)
|
||||
Multi.update_player_position.connect(_on_update_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):
|
||||
|
|
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