Skip to content

Commit

Permalink
avm2/core: Add EventObject::io_error_event and use it
Browse files Browse the repository at this point in the history
  • Loading branch information
Lord-McSweeney authored and Lord-McSweeney committed Jan 14, 2025
1 parent 3051850 commit 9bb1334
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 58 deletions.
20 changes: 20 additions & 0 deletions core/src/avm2/object/event_object.rs
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,26 @@ impl<'gc> EventObject<'gc> {
)
.unwrap()
}

pub fn io_error_event(
activation: &mut Activation<'_, 'gc>,
error_msg: AvmString<'gc>,
error_code: u32,
) -> Value<'gc> {
let class = activation.avm2().classes().ioerrorevent;
class
.construct(
activation,
&[
"ioError".into(),
false.into(),
false.into(),
error_msg.into(),
error_code.into(),
],
)
.unwrap()
}
}

impl<'gc> TObject<'gc> for EventObject<'gc> {
Expand Down
57 changes: 14 additions & 43 deletions core/src/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1692,20 +1692,11 @@ impl<'gc> Loader<'gc> {
Avm2::dispatch_event(activation.context, http_status_evt, target);

// FIXME - Match the exact error message generated by Flash

let io_error_evt_cls = activation.avm2().classes().ioerrorevent;
let io_error_evt = io_error_evt_cls
.construct(
&mut activation,
&[
"ioError".into(),
false.into(),
false.into(),
"Error #2032: Stream Error".into(),
2032.into(),
],
)
.unwrap();
let io_error_evt = Avm2EventObject::io_error_event(
&mut activation,
"Error #2032: Stream Error".into(),
2032,
);

Avm2::dispatch_event(uc, io_error_evt, target);
}
Expand Down Expand Up @@ -1853,21 +1844,14 @@ impl<'gc> Loader<'gc> {
Avm2::dispatch_event(activation.context, complete_evt, sound_object);
}
Err(_err) => {
// FIXME: Match the exact error message generated by Flash.
let mut activation = Avm2Activation::from_nothing(uc);
let io_error_evt_cls = activation.avm2().classes().ioerrorevent;
let io_error_evt = io_error_evt_cls
.construct(
&mut activation,
&[
"ioError".into(),
false.into(),
false.into(),
"Error #2032: Stream Error".into(),
2032.into(),
],
)
.unwrap();

// FIXME: Match the exact error message generated by Flash.
let io_error_evt = Avm2EventObject::io_error_event(
&mut activation,
"Error #2032: Stream Error".into(),
2032,
);

Avm2::dispatch_event(uc, io_error_evt, sound_object);
}
Expand Down Expand Up @@ -2603,21 +2587,8 @@ impl<'gc> Loader<'gc> {

Avm2::dispatch_event(activation.context, http_status_evt, loader_info.into());

// FIXME - Match the exact error message generated by Flash

let io_error_evt_cls = activation.avm2().classes().ioerrorevent;
let io_error_evt = io_error_evt_cls
.construct(
&mut activation,
&[
"ioError".into(),
false.into(),
false.into(),
msg.into(),
0.into(),
],
)
.unwrap();
// FIXME - Match the exact error message and code generated by Flash
let io_error_evt = Avm2EventObject::io_error_event(&mut activation, msg, 0);

Avm2::dispatch_event(uc, io_error_evt, loader_info.into());
}
Expand Down
20 changes: 5 additions & 15 deletions core/src/socket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -258,21 +258,11 @@ impl<'gc> Sockets<'gc> {
SocketKind::Avm2(target) => {
let mut activation = Avm2Activation::from_nothing(context);

let io_error_evt = activation
.avm2()
.classes()
.ioerrorevent
.construct(
&mut activation,
&[
"ioError".into(),
false.into(),
false.into(),
"Error #2031: Socket Error.".into(),
2031.into(),
],
)
.expect("IOErrorEvent should be constructed");
let io_error_evt = EventObject::io_error_event(
&mut activation,
"Error #2031: Socket Error.".into(),
2031,
);

Avm2::dispatch_event(activation.context, io_error_evt, target.into());
}
Expand Down

0 comments on commit 9bb1334

Please sign in to comment.