跳到主要内容

common_event

简介

通用的静态事件库

组件接口

FCommonEvent.gs

通用静态事件组件

函数原型函数作用
void listen_self(string event, function fn)侦听raiser的事件
void listen(string event, function fn)侦听raiser的事件
void listen_other(string ob_name, string event, function fn)侦听指定对象的事件(和listen是一样的)
void raise(string event, ...)触发一个事件
mixed raise_answer(string event, ...)触发一个抢答式的事件

样例

// ctest0.gs
// sample code

component pkg.common_event.FCommonEvent;

import .ptest0;

void create()
{
listen("aaa", (: on_test :));
listen("bbb", (: on_test :));

listen_other(ptest0, "ccc", (: on_test :));
}

parallel void on_test(object raiser, string event, ...)
{
printf("%s: event=%s,raiser=%O\n", __FILE__,event, raiser);
}
// ctest1.gs
// sample code

component .ctest0;

import .ptest0;

void create()
{
listen("aaa", (: on_test :));
listen("bbb", (: on_test :));

listen_other(ptest0, "ccc", (: on_test :));
}

parallel void on_test(object raiser, string event, ...)
{
printf("%s: event=%s,raiser=%O\n", __FILE__,event, raiser);
}
// ctest2.gs
// sample code

component .ctest1;

import .ptest0;

map _v = {};

import gs.lang.*;
import gs.util.*;

void create()
{
listen_self("aaa", (: on_aaa, {}, 2, 3 :));
listen("bbb", (: on_test :));

listen_other(ptest0, "ccc", (: on_test :));
}

parallel void on_test(object raiser, string event, ...)
{
printf("%s: event=%s,raiser=%O\n", __FILE__,event, raiser);
}

void on_aaa(mixed a, int b, int c, string event, ...)
{
_v[time.time_ms()] = true;
printf("hahahaha:%O: %M\n", this.get_domain(), $<);
}
// ptest0.gs
// sample code

component pkg.common_event.FCommonEvent;
// sample0.gs
// sample code

#pragma parallel

import gs.lang.*;
import gs.util.*;

import .ctest2;
import .ptest0;
import pkg.common_event.common_event;

object load(string ob_file)
{
object ob = find_object(ob_file);
if (ob)
return ob;
return load_static(ob_file, domain.create());
}

public void test()
{
printf("--------------------------------\n");
object ob = load(ctest2);
ob.raise("aaa");
ob.raise("bbb");
printf("--------------------------------\n");


object ob2 = new_object(ctest2, domain.create());
ob2.raise("aaa");
ob2.raise("bbb");

printf("--------------------------------\n");

object ob3 = load(ptest0);
ob3.raise("ccc");

printf("--------------------------------\n");
object ob4 = new_object(ptest0, domain.create());
ob4.raise("ccc");

printf("--------------------------------\n");
common_event.dump();
}