first
This commit is contained in:
34
addons/netfox.noray/protocol-handler.gd
Normal file
34
addons/netfox.noray/protocol-handler.gd
Normal file
@@ -0,0 +1,34 @@
|
||||
extends RefCounted
|
||||
class_name NorayProtocolHandler
|
||||
## This class parses incoming data from noray's protocol.
|
||||
##
|
||||
## Unless you're writing your own noray integration, [Noray] should cover most
|
||||
## use cases.
|
||||
|
||||
## Emitted for every command parsed during a [method ingest] call.
|
||||
signal on_command(command: String, data: String)
|
||||
|
||||
var _strbuf: String = ""
|
||||
|
||||
## Resets the parser.
|
||||
func reset():
|
||||
_strbuf = ""
|
||||
|
||||
## Parse an incoming piece of data.
|
||||
func ingest(data: String):
|
||||
_strbuf += data
|
||||
if not _strbuf.contains("\n"):
|
||||
return
|
||||
|
||||
var idx = _strbuf.rfind("\n")
|
||||
var lines = _strbuf.substr(0, idx).split("\n", false)
|
||||
_strbuf = _strbuf.erase(0, idx + 1)
|
||||
|
||||
for line in lines:
|
||||
if not line.contains(" "):
|
||||
on_command.emit(line, "")
|
||||
else:
|
||||
var parts = line.split(" ")
|
||||
var command = parts[0]
|
||||
var param = parts[1]
|
||||
on_command.emit(command, param)
|
||||
Reference in New Issue
Block a user