Cycle through multiple termtypes instead of just sending one.

This commit is contained in:
Condorra 2024-11-19 22:58:55 +11:00
parent 1efc6fa4e6
commit 3623acbd21

View File

@ -690,6 +690,20 @@ pub(super) fn mudoutput_subnegotiation_termtype<'gc>(
const SEND_CMD: u8 = 1;
match cmd {
SEND_CMD => {
let negidx: Value = mud.get(ctx, "termtype_negotiation_index")?;
let mut negidx: u64 = if negidx.is_nil() {
1
} else {
u64::from_value(ctx, negidx)?
};
let supported_termtypes: Table = mud.get(ctx, "supported_termtypes")?;
let optlen = supported_termtypes.length() as u64;
if negidx > optlen {
negidx = 1;
}
let termtype: String = supported_termtypes.get(ctx, negidx as i64)?;
send_subnegotiation_if_allowed(
ctx,
&mud,
@ -699,8 +713,11 @@ pub(super) fn mudoutput_subnegotiation_termtype<'gc>(
memo: global_memo.clone(),
mud: socket.clone(),
},
format!("\x00{}", "XTERM").as_bytes(),
format!("\x00{}", &termtype).as_bytes(),
);
mud.set(ctx, "termtype_negotiation_index", (negidx + 1) as i64)?;
Ok(CallbackReturn::Return)
}
_ => Ok(CallbackReturn::Return),
@ -773,6 +790,11 @@ pub(super) fn new_mud<'gc>(ctx: Context<'gc>) -> Callback<'gc> {
),
);
mud.set(ctx, ctx.intern_static(b"frameroutes"), frameroutes)?;
let termtypes: Table = Table::new(&ctx);
termtypes.set(ctx, 1_i64, "WORLDWIDEPORTAL")?;
termtypes.set(ctx, 2_i64, "XTERM")?;
termtypes.set(ctx, 3_i64, "MTTS 815")?;
mud.set(ctx, ctx.intern_static(b"supported_termtypes"), termtypes)?;
let curr_frame: Value = ctx
.get_global::<Table>("info")?