Skip to content

Commit a7ab30d

Browse files
use mutex instead of Rc and Cell as callbacks might be called from one another from CAPI component or omp server (related #6)
1 parent 75848ef commit a7ab30d

File tree

15 files changed

+84
-70
lines changed

15 files changed

+84
-70
lines changed

omp-gdk/src/runtime.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::events::Events;
2-
use std::{cell::RefCell, rc::Rc};
2+
use std::sync::{Arc, Mutex};
33

4-
type OMPRSModule = Rc<RefCell<dyn Events + 'static>>;
4+
type OMPRSModule = Arc<Mutex<dyn Events + 'static>>;
55

66
/// Runtime global object that implements all the callbacks and gamemode data
77
pub static mut Runtime: Option<Vec<Box<OMPRSModule>>> = None;

omp-gdk/src/scripting/actors/events.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub unsafe extern "C" fn OMPRS_OnPlayerGiveDamageActor(
2020
) {
2121
let scripts = crate::runtime::Runtime.as_mut().unwrap();
2222
for script in scripts.iter_mut() {
23-
script.borrow_mut().on_player_give_damage_actor(
23+
script.lock().unwrap().on_player_give_damage_actor(
2424
Player::new(*(*(*args).list).player),
2525
Actor::new(*(*(*args).list).actor),
2626
*(*(*args).list).amount,
@@ -40,7 +40,7 @@ pub struct OnActorStreamInArgs {
4040
pub unsafe extern "C" fn OMPRS_OnActorStreamIn(args: *const EventArgs<OnActorStreamInArgs>) {
4141
let scripts = crate::runtime::Runtime.as_mut().unwrap();
4242
for script in scripts.iter_mut() {
43-
script.borrow_mut().on_actor_stream_in(
43+
script.lock().unwrap().on_actor_stream_in(
4444
Actor::new(*(*(*args).list).actor),
4545
Player::new(*(*(*args).list).forPlayer),
4646
);
@@ -57,7 +57,7 @@ pub struct OnActorStreamOutArgs {
5757
pub unsafe extern "C" fn OMPRS_OnActorStreamOut(args: *const EventArgs<OnActorStreamOutArgs>) {
5858
let scripts = crate::runtime::Runtime.as_mut().unwrap();
5959
for script in scripts.iter_mut() {
60-
script.borrow_mut().on_actor_stream_out(
60+
script.lock().unwrap().on_actor_stream_out(
6161
Actor::new(*(*(*args).list).actor),
6262
Player::new(*(*(*args).list).forPlayer),
6363
);

omp-gdk/src/scripting/checkpoints/events.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ pub unsafe extern "C" fn OMPRS_OnPlayerEnterCheckpoint(
1313
let scripts = crate::runtime::Runtime.as_mut().unwrap();
1414
for script in scripts.iter_mut() {
1515
script
16-
.borrow_mut()
16+
.lock()
17+
.unwrap()
1718
.on_player_enter_checkpoint(Player::new(*(*(*args).list).player));
1819
}
1920
}
@@ -30,7 +31,8 @@ pub unsafe extern "C" fn OMPRS_OnPlayerLeaveCheckpoint(
3031
let scripts = crate::runtime::Runtime.as_mut().unwrap();
3132
for script in scripts.iter_mut() {
3233
script
33-
.borrow_mut()
34+
.lock()
35+
.unwrap()
3436
.on_player_leave_checkpoint(Player::new(*(*(*args).list).player));
3537
}
3638
}
@@ -47,7 +49,8 @@ pub unsafe extern "C" fn OMPRS_OnPlayerEnterRaceCheckpoint(
4749
let scripts = crate::runtime::Runtime.as_mut().unwrap();
4850
for script in scripts.iter_mut() {
4951
script
50-
.borrow_mut()
52+
.lock()
53+
.unwrap()
5154
.on_player_enter_race_checkpoint(Player::new(*(*(*args).list).player));
5255
}
5356
}
@@ -64,7 +67,8 @@ pub unsafe extern "C" fn OMPRS_OnPlayerLeaveRaceCheckpoint(
6467
let scripts = crate::runtime::Runtime.as_mut().unwrap();
6568
for script in scripts.iter_mut() {
6669
script
67-
.borrow_mut()
70+
.lock()
71+
.unwrap()
6872
.on_player_leave_race_checkpoint(Player::new(*(*(*args).list).player));
6973
}
7074
}

omp-gdk/src/scripting/classes/events.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub unsafe extern "C" fn OMPRS_OnPlayerRequestClass(
1414
let scripts = crate::runtime::Runtime.as_mut().unwrap();
1515
let mut ret = false;
1616
for script in scripts.iter_mut() {
17-
ret = script.borrow_mut().on_player_request_class(
17+
ret = script.lock().unwrap().on_player_request_class(
1818
Player::new(*(*(*args).list).player),
1919
*(*(*args).list).classId,
2020
);

omp-gdk/src/scripting/core/events.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub struct OnTickArgs {
1010
pub unsafe extern "C" fn OMPRS_OnTick(args: *const EventArgs<OnTickArgs>) {
1111
let scripts = crate::runtime::Runtime.as_mut().unwrap();
1212
for script in scripts.iter_mut() {
13-
script.borrow_mut().on_tick(*(*(*args).list).elapsed);
13+
script.lock().unwrap().on_tick(*(*(*args).list).elapsed);
1414
}
1515
}
1616

@@ -25,7 +25,7 @@ pub unsafe extern "C" fn OMPRS_OnConsoleText(args: *const EventArgs<OnConsoleTex
2525
let scripts = crate::runtime::Runtime.as_mut().unwrap();
2626
let mut ret = false;
2727
for script in scripts.iter_mut() {
28-
ret = script.borrow_mut().on_console_text(
28+
ret = script.lock().unwrap().on_console_text(
2929
(*(*(*args).list).command).get_data(),
3030
(*(*(*args).list).parameters).get_data(),
3131
);
@@ -51,7 +51,7 @@ pub unsafe extern "C" fn OMPRS_OnRconLoginAttempt(
5151
let scripts = crate::runtime::Runtime.as_mut().unwrap();
5252
let mut ret = false;
5353
for script in scripts.iter_mut() {
54-
ret = script.borrow_mut().on_rcon_login_attempt(
54+
ret = script.lock().unwrap().on_rcon_login_attempt(
5555
(*(*(*args).list).address).get_data(),
5656
(*(*(*args).list).password).get_data(),
5757
*(*(*args).list).success,

omp-gdk/src/scripting/dialogs/events.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub struct OnDialogResponseArgs {
1515
pub unsafe extern "C" fn OMPRS_OnDialogResponse(args: *const EventArgs<OnDialogResponseArgs>) {
1616
let scripts = crate::runtime::Runtime.as_mut().unwrap();
1717
for script in scripts.iter_mut() {
18-
script.borrow_mut().on_dialog_response(
18+
script.lock().unwrap().on_dialog_response(
1919
Player::new(*(*(*args).list).player),
2020
*(*(*args).list).dialogId,
2121
transmute(*(*(*args).list).response),

omp-gdk/src/scripting/gangzones/events.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub unsafe extern "C" fn OMPRS_OnPlayerEnterGangZone(
1515
) {
1616
let scripts = crate::runtime::Runtime.as_mut().unwrap();
1717
for script in scripts.iter_mut() {
18-
script.borrow_mut().on_player_enter_gang_zone(
18+
script.lock().unwrap().on_player_enter_gang_zone(
1919
Player::new(*(*(*args).list).player),
2020
GangZone::new(*(*(*args).list).zone),
2121
);
@@ -34,7 +34,7 @@ pub unsafe extern "C" fn OMPRS_OnPlayerLeaveGangZone(
3434
) {
3535
let scripts = crate::runtime::Runtime.as_mut().unwrap();
3636
for script in scripts.iter_mut() {
37-
script.borrow_mut().on_player_leave_gang_zone(
37+
script.lock().unwrap().on_player_leave_gang_zone(
3838
Player::new(*(*(*args).list).player),
3939
GangZone::new(*(*(*args).list).zone),
4040
);
@@ -53,7 +53,7 @@ pub unsafe extern "C" fn OMPRS_OnPlayerClickGangZone(
5353
) {
5454
let scripts = crate::runtime::Runtime.as_mut().unwrap();
5555
for script in scripts.iter_mut() {
56-
script.borrow_mut().on_player_click_gang_zone(
56+
script.lock().unwrap().on_player_click_gang_zone(
5757
Player::new(*(*(*args).list).player),
5858
GangZone::new(*(*(*args).list).zone),
5959
);

omp-gdk/src/scripting/menus/events.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub unsafe extern "C" fn OMPRS_OnPlayerSelectedMenuRow(
1313
) {
1414
let scripts = crate::runtime::Runtime.as_mut().unwrap();
1515
for script in scripts.iter_mut() {
16-
script.borrow_mut().on_player_selected_menu_row(
16+
script.lock().unwrap().on_player_selected_menu_row(
1717
Player::new(*(*(*args).list).player),
1818
*(*(*args).list).row,
1919
);
@@ -30,7 +30,8 @@ pub unsafe extern "C" fn OMPRS_OnPlayerExitedMenu(args: *const EventArgs<OnPlaye
3030
let scripts = crate::runtime::Runtime.as_mut().unwrap();
3131
for script in scripts.iter_mut() {
3232
script
33-
.borrow_mut()
33+
.lock()
34+
.unwrap()
3435
.on_player_exited_menu(Player::new(*(*(*args).list).player));
3536
}
3637
}

omp-gdk/src/scripting/models/events.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ pub unsafe extern "C" fn OMPRS_OnPlayerFinishedDownloading(
1515
let scripts = crate::runtime::Runtime.as_mut().unwrap();
1616
for script in scripts.iter_mut() {
1717
script
18-
.borrow_mut()
18+
.lock()
19+
.unwrap()
1920
.on_player_finished_downloading(Player::new(*(*(*args).list).player));
2021
}
2122
}
@@ -33,7 +34,7 @@ pub unsafe extern "C" fn OMPRS_OnPlayerRequestDownload(
3334
) {
3435
let scripts = crate::runtime::Runtime.as_mut().unwrap();
3536
for script in scripts.iter_mut() {
36-
script.borrow_mut().on_player_request_download(
37+
script.lock().unwrap().on_player_request_download(
3738
Player::new(*(*(*args).list).player),
3839
transmute(*(*(*args).list).model_type),
3940
*(*(*args).list).checksum,

omp-gdk/src/scripting/objects/events.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ pub unsafe extern "C" fn OMPRS_OnObjectMove(args: *const EventArgs<OnObjectMoveA
1515
let scripts = crate::runtime::Runtime.as_mut().unwrap();
1616
for script in scripts.iter_mut() {
1717
script
18-
.borrow_mut()
18+
.lock()
19+
.unwrap()
1920
.on_object_moved(Object::new(*(*(*args).list).object));
2021
}
2122
}
@@ -30,7 +31,7 @@ pub struct OnPlayerObjectMoveArgs {
3031
pub unsafe extern "C" fn OMPRS_OnPlayerObjectMove(args: *const EventArgs<OnPlayerObjectMoveArgs>) {
3132
let scripts = crate::runtime::Runtime.as_mut().unwrap();
3233
for script in scripts.iter_mut() {
33-
script.borrow_mut().on_player_object_moved(
34+
script.lock().unwrap().on_player_object_moved(
3435
Player::new(*(*(*args).list).player),
3536
PlayerObject::new(
3637
*(*(*args).list).object,
@@ -57,7 +58,7 @@ pub struct OnPlayerEditObjectArgs {
5758
pub unsafe extern "C" fn OMPRS_OnPlayerEditObject(args: *const EventArgs<OnPlayerEditObjectArgs>) {
5859
let scripts = crate::runtime::Runtime.as_mut().unwrap();
5960
for script in scripts.iter_mut() {
60-
script.borrow_mut().on_player_edit_object(
61+
script.lock().unwrap().on_player_edit_object(
6162
Player::new(*(*(*args).list).player),
6263
Object::new(*(*(*args).list).object),
6364
transmute(*(*(*args).list).response),
@@ -112,7 +113,7 @@ pub unsafe extern "C" fn OMPRS_OnPlayerEditAttachedObject(
112113
) {
113114
let scripts = crate::runtime::Runtime.as_mut().unwrap();
114115
for script in scripts.iter_mut() {
115-
script.borrow_mut().on_player_edit_attached_object(
116+
script.lock().unwrap().on_player_edit_attached_object(
116117
Player::new(*(*(*args).list).player),
117118
*(*(*args).list).index,
118119
*(*(*args).list).saved,
@@ -156,7 +157,7 @@ pub unsafe extern "C" fn OMPRS_OnPlayerSelectObject(
156157
) {
157158
let scripts = crate::runtime::Runtime.as_mut().unwrap();
158159
for script in scripts.iter_mut() {
159-
script.borrow_mut().on_player_select_object(
160+
script.lock().unwrap().on_player_select_object(
160161
Player::new(*(*(*args).list).player),
161162
Object::new(*(*(*args).list).object),
162163
*(*(*args).list).model,

0 commit comments

Comments
 (0)