mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-22 12:29:46 +01:00
NTNet Relay upgrades
- NTNet Quantum Relays now have simple UI that allows users to manually toggle them on/off. - Implements simplified Denial of Service handling for relays. This will be used by next commit that will add antagonist software. - Relays can buffer and dissipate certain amount of DoS traffic. If this traffic exceeds certain level (configurable via varedit) the relay crashes temporarily. - Relays may be manually reset by using specific button in the UI - Relays are now buildable. They are relatively cheap (circuit board and some cables), but the board requires Data Theory 4 research.
This commit is contained in:
@@ -62,3 +62,11 @@ obj/item/weapon/circuitboard/rdserver
|
||||
"/obj/item/weapon/stock_parts/manipulator" = 1,
|
||||
"/obj/item/weapon/stock_parts/micro_laser" = 1,
|
||||
"/obj/item/weapon/stock_parts/console_screen" = 1)
|
||||
|
||||
obj/item/weapon/circuitboard/ntnet_relay
|
||||
name = "Circuit board (NTNet Quantum Relay)"
|
||||
build_path = "/obj/machinery/ntnet_relay"
|
||||
board_type = "machine"
|
||||
origin_tech = list(TECH_DATA = 4)
|
||||
req_components = list(
|
||||
"/obj/item/stack/cable_coil" = 15)
|
||||
|
||||
@@ -2,20 +2,94 @@
|
||||
/obj/machinery/ntnet_relay
|
||||
name = "NTNet Quantum Relay"
|
||||
desc = "A very complex router and transmitter capable of connecting electronic devices together. Looks fragile."
|
||||
use_power = 1
|
||||
idle_power_usage = 20000 //20kW, apropriate for machine that keeps massive cross-Zlevel wireless network operational.
|
||||
use_power = 2
|
||||
active_power_usage = 20000 //20kW, apropriate for machine that keeps massive cross-Zlevel wireless network operational.
|
||||
idle_power_usage = 100
|
||||
icon_state = "bus"
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/datum/ntnet/NTNet = null // This is mostly for backwards reference and to allow varedit modifications from ingame.
|
||||
var/enabled = 1 // Set to 0 if the relay was turned off
|
||||
var/dos_failure = 0 // Set to 1 if the relay failed due to (D)DoS attack
|
||||
|
||||
// Denial of Service attack variables
|
||||
var/dos_overload = 0 // Amount of DoS "packets" in this relay's buffer
|
||||
var/dos_capacity = 500 // Amount of DoS "packets" in buffer required to crash the relay
|
||||
var/dos_dissipate = 1 // Amount of DoS "packets" dissipated over time.
|
||||
|
||||
|
||||
// TODO: Implement more logic here. For now it's only a placeholder.
|
||||
/obj/machinery/ntnet_relay/proc/is_operational()
|
||||
if(stat & (BROKEN | NOPOWER | EMPED))
|
||||
return 0
|
||||
if(dos_failure)
|
||||
return 0
|
||||
if(!enabled)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/machinery/ntnet_relay/update_icon()
|
||||
if(is_operational())
|
||||
icon_state = "bus"
|
||||
else
|
||||
icon_state = "bus_off"
|
||||
|
||||
/obj/machinery/ntnet_relay/process()
|
||||
if(is_operational())
|
||||
use_power = 2
|
||||
else
|
||||
use_power = 1
|
||||
|
||||
if(dos_overload)
|
||||
dos_overload = max(0, dos_overload - dos_dissipate)
|
||||
|
||||
// If DoS traffic exceeded capacity, crash.
|
||||
if((dos_overload > dos_capacity) && !dos_failure)
|
||||
dos_failure = 1
|
||||
update_icon()
|
||||
ntnet_global.add_log("Quantum relay switched from normal operation mode to overload recovery mode.")
|
||||
// If the DoS buffer reaches 0 again, restart.
|
||||
if((dos_overload == 0) && dos_failure)
|
||||
dos_failure = 0
|
||||
update_icon()
|
||||
ntnet_global.add_log("Quantum relay switched from overload recovery mode to normal operation mode.")
|
||||
..()
|
||||
|
||||
/obj/machinery/ntnet_relay/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
|
||||
var/list/data = list()
|
||||
data["enabled"] = enabled
|
||||
data["dos_capacity"] = dos_capacity
|
||||
data["dos_overload"] = dos_overload
|
||||
data["dos_crashed"] = dos_failure
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "ntnet_relay.tmpl", "NTNet Quantum Relay", 500, 300, state = state)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/machinery/ntnet_relay/attack_hand(var/mob/living/user)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/ntnet_relay/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
if(href_list["restart"])
|
||||
dos_overload = 0
|
||||
dos_failure = 0
|
||||
update_icon()
|
||||
ntnet_global.add_log("Quantum relay manually restarted from overload recovery mode to normal operation mode.")
|
||||
else if(href_list["toggle"])
|
||||
enabled = !enabled
|
||||
ntnet_global.add_log("Quantum relay manually [enabled ? "enabled" : "disabled"].")
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/ntnet_relay/New()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/stack/cable_coil(src,15)
|
||||
component_parts += new /obj/item/weapon/circuitboard/ntnet_relay(src)
|
||||
|
||||
if(ntnet_global)
|
||||
ntnet_global.relays.Add(src)
|
||||
NTNet = ntnet_global
|
||||
@@ -27,4 +101,24 @@
|
||||
ntnet_global.relays.Remove(src)
|
||||
ntnet_global.add_log("Quantum relay connection severed. Current amount of linked relays: [NTNet.relays.len]")
|
||||
NTNet = null
|
||||
..()
|
||||
|
||||
/obj/machinery/ntnet_relay/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
panel_open = !panel_open
|
||||
user << "You [panel_open ? "open" : "close"] the maintenance hatch"
|
||||
return
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
if(!panel_open)
|
||||
user << "Open the maintenance panel first."
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
user << "You disassemble \the [src]!"
|
||||
|
||||
for(var/atom/movable/A in component_parts)
|
||||
A.forceMove(src.loc)
|
||||
new/obj/machinery/constructable_frame/machine_frame(src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
@@ -4,7 +4,7 @@ var/global/nttransfer_uid = 0
|
||||
filename = "nttransfer"
|
||||
filedesc = "NTNet P2P Transfer Client"
|
||||
program_icon_state = "generic"
|
||||
size = 1
|
||||
size = 5
|
||||
requires_ntnet = 1
|
||||
requires_ntnet_feature = NTNET_PEERTOPEER
|
||||
network_destination = "other device via P2P tunnel"
|
||||
|
||||
@@ -1434,6 +1434,13 @@ CIRCUITS BELOW
|
||||
build_path = /obj/item/weapon/circuitboard/shield_cap
|
||||
sort_string = "VAAAC"
|
||||
|
||||
/datum/design/circuit/ntnet_relay
|
||||
name = "NTNet Quantum Relay"
|
||||
id = "ntnet_relay"
|
||||
req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/weapon/circuitboard/ntnet_relay
|
||||
sort_string = "WAAAA"
|
||||
|
||||
/datum/design/circuit/aicore
|
||||
name = "AI core"
|
||||
id = "aicore"
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
{{if data.dos_crashed}}
|
||||
<h2>NETWORK BUFFERS OVERLOADED</h2>
|
||||
<h3>Overload Recovery Mode</h3>
|
||||
<i>This system is suffering temporary outage due to overflow of traffic buffers. Until buffered traffic is processed, all further requests will be dropped. Frequent occurences of this error may indicate insufficient hardware capacity of your network. Please contact your network planning department for instructions on how to resolve this issue.</i>
|
||||
<h3>ADMINISTRATIVE OVERRIDE</h3>
|
||||
<b> CAUTION - Data loss may occur </b>
|
||||
{{:helper.link('Purge buffered traffic', null, { 'restart' : 1 })}}
|
||||
{{else}}
|
||||
<div class="itemLabel">
|
||||
Relay status:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{if data.enabled}}
|
||||
{{:helper.link('ENABLED', null, { 'toggle' : 1 })}}
|
||||
{{else}}
|
||||
{{:helper.link('DISABLED', null, { 'toggle' : 1 })}}
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Network buffer status:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:data.dos_overload}} / {{:data.dos_capacity}} GQ
|
||||
</div>
|
||||
{{/if}}
|
||||
Reference in New Issue
Block a user