rustg for UDP shipping (#7897)

The C++ UDP logging library has been swapped out with a rustg implementation. The rustg library uses non-blocking IO mode, and hopefully has less trouble than the C++ one. Though we'll have to see. It should error when the call is supposed to block.

The old library has been removed.
This commit is contained in:
Erki
2020-01-11 21:17:41 +02:00
committed by GitHub
parent 6a5073bac6
commit 18e03e0a02
9 changed files with 63 additions and 135 deletions
+49 -54
View File
@@ -24,72 +24,67 @@
| |
@===================================@
You can easily send UDP Data via the UDPSHipper.dll
The prerequisite for using this is rustg compiled with the udp_shipper feature.
Simply use the call() function to call the udp shipper DLL and enter your details!
The first bit of code needed will always be the same, You will never have to touch this, Copy-pasta all you like:
call("UDPShipper.dll", "send_udp_data")
Well thats the first part, the harder part is to input the details into DLL. Lets do that now! The syntax to add arguments to the post request is:
call("UDPShipper.dll", "send_udp_data")(DestinationIP, DestinationPort, Data)
DLL Written by Arrow768
Rustg's rustg_udp_shipper_send function is used to send data.
*/
/*
* A generic proc for sending udp request with the aforementioned .DLL files.
* Expected arg structure:
* 1st arg - the destination ip
* 2nd arg - the destination port
* 3rd arg - The Data to send
*
* @return int - Error code
* -1 indicates proc or library failure.
/**
* Sends data via UDP.
*
* addr must be formatted as "ip:port".
* data must be a string to be sent.
*/
/proc/send_udp_data()
if (args.len < 3)
return -1
/proc/send_udp_data(addr, data)
#ifdef RUST_G
# ifndef rustg_udp_shipper_send
# error rustg_udp_shipper_send macro is not defined for rustg.
# endif // rustg_udp_shipper_send
var/result = call("UDPShipper.dll", "send_udp_data")(arglist(args))
if (!addr || !data)
return "Not enough args."
return result
. = rustg_udp_shipper_send(addr, data)
if (.)
error("UDP Shipper error: [.]")
#else
return
#endif // RUST_G
/proc/send_gelf_log(short_message="", long_message="", level = 5, category="", additional_data=list())
if (!config)
return 100
if (!config.log_gelf_enabled)
return 101
var/list/log_data = list()
log_data["version"] = "1.1"
log_data["host"] = world.name
log_data["short_message"] = html_encode(short_message)
log_data["long_message"] = html_encode(long_message)
log_data["level"] = level
log_data["_category"] = category
log_data["_game_id"] = game_id
if (!config)
return "Configuration not loaded."
if (!config.log_gelf_enabled)
return "Gelf logging not enabled."
var/list/log_data = list()
log_data["version"] = "1.1"
log_data["host"] = world.name
log_data["short_message"] = html_encode(short_message)
log_data["long_message"] = html_encode(long_message)
log_data["level"] = level
log_data["_category"] = category
log_data["_game_id"] = game_id
log_data.Add(additional_data)
var/gelf_log = json_encode(log_data)
return send_udp_data(config.log_gelf_ip,config.log_gelf_port,gelf_log)
log_data.Add(additional_data)
var/gelf_log = json_encode(log_data)
return send_udp_data(config.log_gelf_addr, gelf_log)
/obj/item/device/udp_debugger
name = "udp_debugger"
desc = "Used to debug UDP Data sent to the log server."
icon = 'icons/obj/hacktool.dmi'
icon_state = "hacktool-g"
force = 5.0
w_class = 2.0
throwforce = 5.0
throw_range = 15
throw_speed = 3
desc = "You can use this to debug sending udp logs to the log server"
name = "udp_debugger"
desc = "Used to debug UDP Data sent to the log server."
icon = 'icons/obj/hacktool.dmi'
icon_state = "hacktool-g"
force = 5.0
w_class = 2.0
throwforce = 5.0
throw_range = 15
throw_speed = 3
desc = "You can use this to debug sending udp logs to the log server"
/obj/item/device/udp_debugger/proc/raw(ip=config.log_gelf_ip,port=config.log_gelf_port,data="RAW Test String")
return send_udp_data(ip,port,data)
/obj/item/device/udp_debugger/proc/raw(addr=config.log_gelf_addr, data="RAW Test String")
return send_udp_data(addr,data)
/obj/item/device/udp_debugger/proc/gelf(short_message="", long_message="", level = 1)
return send_gelf_log(short_message, long_message, level)
return send_gelf_log(short_message, long_message, level)