* sedikit glossarium

  1. Event: Sebuah peristiwa, contoh: `if (keyboard_check(ord(“A”)) { // peristiwa }
  2. Emit: Sebuah aksi untuk mengumumkan suatu event sedang/telah terjadi
  3. Callback: Fungsi yang akan dipanggil ketika suatu event terjadi
  4. Event Publisher / Provider / Emitter: Sesuatu yang akan meng-emit event | *ada alasan kenapa menggunakan sesuatu bukan objek
  5. Event Poller / Subscriber: Sesuatu yang mendaftarkan fungsi yang akan dipanggil
  6. 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