* sedikit glossarium
- Event: Sebuah peristiwa, contoh: `if (keyboard_check(ord(“A”)) { // peristiwa }
- Emit: Sebuah aksi untuk mengumumkan suatu event sedang/telah terjadi
- Callback: Fungsi yang akan dipanggil ketika suatu event terjadi
- Event Publisher / Provider / Emitter: Sesuatu yang akan meng-emit event | *ada alasan kenapa menggunakan sesuatu bukan objek
- Event Poller / Subscriber: Sesuatu yang mendaftarkan fungsi yang akan dipanggil
- Event Broker: Objek yang menghandle pembuatan event, pendaftaran callback, pemanggilan callback, hingga cleanup event
About
Event broker merupakan core system dari modul Support/Shariyl. Event broker menyediakan cara untuk para developer agar dapat menggunakan event-based style code. System ini mirip dengan pola pub/sub pada umumnya yang di implementasikan pada redis, gcp, dan beberapa framework umum yang menggunakan pattern asyncronous event based.
Secara umum, event broker memiliki interaksi antar komponennya sebagai berikut
Alur pada umumnya dapat dilihat sebagai berikut
Example real usecase:
obj_will_emit_event
:create
event_example = event_broker.register_event_emittable("EVENT_EMIT_EXAMPLE");
listen_keypress = reference_function(self.id, keyboard_check, [vk_enter]);
obj_will_emit_event
:step
if (listen_keypress()) {
event_example.emit();
}
read Function Reference for learn about reference_function
obj_subscribe_emit_event
:create
function on_event_example_emitted() {
show_debug_message("Terpanggil");
}
// -----------------------------------------------------------------
event_broker.subscribe_event_emittable(self.id, "EVENT_EMIT_EXAMPLE", on_event_example_emitted);
// or
obj_will_emit_event.event_example.subscribe(self.id, on_event_example_emitted);
// either will do and the function will called
Pada umumnya, event emitter akan mendaftarakan eventnya terlebih dahulu. Ada kalanya event subscriber akan meregister callback terlebih dahulu sebelum emitter mendaftarkan eventnya. Pada kejadian tersebut, event akan dibuat sekaligus mendaftarkan callbacknya. Ketika emitter akan mendaftarkan eventnya, broker akan memberikan eventnya tanpa membuat yang baru.
Attributes
Methods
Events
Bug Logs
White Screen Freeze saat self subscribe event
Bug ini muncul ketika ada sebuah objek yang menyediakan event, kemudian melakukan subscribe ke event tersebut. Hasilnya adalah saat di debug/run game akan stuck di layar putih not responding.
Jika dilihat dari output log, pesan terakhir yang disampaikan adalah
Done ObjectLists
Done Extension_Initialize
About to startroom
Setelah diidentifikasi, masalahnya terlalu sederhana sampai sangat menjengkelkan. Bug ini disebabkan oleh Struct yang ditaruh di dalam objek obj_core_system_event_broker seperti ini
Hipotesis dari bug ini adalah Order of Execution dari gamemaker yang dimana beberapa objek tidak dapat melakukan reference ke struct ini untuk objek yang dibuat (di dalam IDE) setelah obj_core_system_event_broker ini dibuat. Tapi sepertinya hipotesis ini tidak cukup sempurna. Dengan hipotesis ini solusi yang terpikir utama adalah mengeluarkan struct ini dari objek ke dalam sebuah script dan entah kenapa dengan memindahkannya ke script menyelesaikan masalah tersebut…
05/08/2024 banyak yang sudah ok, tapi beberapa objek masih memberikan freeze whitescreen yang ok
- semua tentang per list an
- control stack yang masih
- obj_training_controller yang subscribe
event_input_menu_open
- event_on_gain_control di
obj_list_menu_training_spawn_generic