import {MemoryUtil} from '../../common/MemoryUtil';
import {Listener} from '../../common/lang/Listener';
import {ListenerContext} from '../../common/lang/ListenerContext';
import {LoggerUtil} from '../../common/lang/LoggerUtil';
import {ObjectUtil} from '../../common/lang/ObjectUtil';
import {Objects} from '../../common/lang/Objects';
import {ScopeEnum} from '../../common/lang/ScopeEnum';
import {ClassUtil} from '../../common/reflect/ClassUtil';
import {Linker} from '../../common/reflect/Linker';
import {Service} from '../Service';
import {ListenerThread} from './ListenerThread';
import {ThreadService} from './ThreadService';
//==========================================================
// 环境控制台。
//
// @console
// @author maocy
// @version 150606
//==========================================================
export class EventService extends Service {
// 线程控制台
@Linker(ThreadService)
public _threadConsole: ThreadService = null;
// 线程对象
protected _thread: ListenerThread = null;
// 处理间隔
protected _interval: number = 50;
// 处理事件集合(对事件中产生的事件排队)
public _processEvents = null;
// 事件集合
public _events = null;
//==========================================================
// 检验传入值是否是整型值。
//
// @method
// @param v:value:String 待检验的字符串
// @return Boolean 是否整数
//==========================================================
public static listenerProcess(context: ListenerContext) {
context.process();
MemoryUtil.free(event);
}
//==========================================================
// 静态构造处理。
//==========================================================
// public static initialize() {
//var eventConsole = RClass.getInstance(FEventConsole);
//RListener.process = (context: SListenerContext) => {
// eventConsole._events.push(context);
//};
// }
//==========================================================
// 构造处理。
//==========================================================
public constructor() {
super();
// 设置属性
this._scopeCd = ScopeEnum.Local;
// 创建属性
this._processEvents = new Objects();
this._events = new Objects();
// 创建线程
var thread: ListenerThread = this._thread = ClassUtil.create(ListenerThread);
thread.interval = this._interval;
thread.processListeners.register(this, this.onProcess);
this._threadConsole.start(thread);
LoggerUtil.debug(this, 'Add event thread. (thread={1})', ClassUtil.dump(thread));
}
//==========================================================
// 事件后台处理。
//
// @param context 环境
// @param parameters 参数集合
//==========================================================
public onProcess(context: ListenerContext, parameters: any) {
// 检查数据
var events = this._events;
if (events.isEmpty()) {
return;
}
// 接收事件
var processEvents = this._processEvents;
processEvents.assign(events);
events.clear();
// 事件处理
var count: number = processEvents.count();
if (count > 0) {
// 执行事件
for (var n: number = 0; n < count; n++) {
var event: any = processEvents.at(n);
event.process();
MemoryUtil.free(event);
}
// 清除运行队列
processEvents.clear();
}
}
//==========================================================
// 释放处理。
//
// @method
//==========================================================
public dispose() {
// 释放处理
this._processEvents = ObjectUtil.dispose(this._processEvents);
this._events = ObjectUtil.dispose(this._events);
// 父处理
super.dispose();
}
}