extends Node

signal data_received(string)
signal new_connection

export var port: int

var _s = TCP_Server.new()
var _c
var _connected = false

func _ready():
	start()

func start():
	_s.listen(port, "127.0.0.1")
		
func _process(_delta):
	if _s.is_connection_available():
		if _connected:
			_c.disconnect_from_host()
			helpers.crash("Dropping active connection")
		_c = _s.take_connection()
		_connected = true
		emit_signal("new_connection")
		print("connected!")
	
	if _connected:
		if _c.get_status() != StreamPeerTCP.STATUS_CONNECTED:
			_connected = false
			print("disconnected")
#		var available = _c.get_available_bytes()
#		while available > 0:
#			var data = _c.get_utf8_string(available)
#			emit_signal("data_received", data)
#			available = _c.get_available_bytes()

func send(text):
	if _connected:
		_c.put_utf8_string(text)
		var response = _c.get_utf8_string()
		var exit_code = _c.get_u32()
		
		var shell_command = ShellCommand.new()
		shell_command.command = text
		shell_command.output = response
		#print("response:")
		#print(response)
		shell_command.exit_code = exit_code
		return shell_command
	else:
		helpers.crash("Trying to send data on closed connection")