##// END OF EJS Templates
Async operation cancellation proposal...
Async operation cancellation proposal ActivatableMixin

File last commit:

r9:c1c00bfb5487 propose cancellat...
r9:c1c00bfb5487 propose cancellat...
Show More
TraceSource.ts
115 lines | 2.4 KiB | video/mp2t | TypeScriptLexer
import * as TraceEventArgs from './TraceEventArgs'
import * as format from '../text/format'
interface Handler {
(arg: TraceEventArgs): void;
}
interface Destroyable {
destroy();
}
class HandlerDescriptor implements Destroyable {
private _target: TraceSource
readonly handler: Handler;
constructor(target: TraceSource, handler: Handler) {
this._target = target;
this.handler = handler;
}
destroy() {
this._target.remove(this);
}
}
class TraceSource {
readonly id: any
private _handlers: Array<HandlerDescriptor>
level: number
constructor(id: any) {
this.id = id || new Object();
this._handlers = new Array<HandlerDescriptor>();
}
on(handler: Handler): Destroyable {
if (!handler)
throw new Error("A handler must be specified");
let d = new HandlerDescriptor(this, handler)
this._handlers.push(d);
return d;
}
remove(cookie: any): void {
let i = this._handlers.indexOf(cookie);
if (i >= 0)
this._handlers.splice(i, 1);
}
protected emit(level: number, msg: string, ...args: any[]) {
if (level <= this.level) {
let event = new TraceEventArgs(this, format(msg, args));
this._handlers.forEach(d => {
try {
d.handler.call(null, event);
} catch {
// suppress error in log handlers
}
});
}
}
isDebugEnabled() {
return this.level >= TraceSource.DebugLevel;
}
debug(msg: string, ...args: any[]): void {
this.emit(TraceSource.DebugLevel, msg, args);
}
isLogEnabled() {
return this.level >= TraceSource.LogLevel;
}
log(msg: string, ...args: any[]): void {
this.emit(TraceSource.LogLevel, msg, args);
}
isWarnEnabled() {
return this.level >= TraceSource.WarnLevel;
}
warn(msg: string, ...args: any[]): void {
this.emit(TraceSource.WarnLevel, msg, args);
}
isErrorEnabled() {
return this.level >= TraceSource.ErrorLevel;
}
error(msg: string, ...args: any[]): void {
this.emit(TraceSource.ErrorLevel, msg, args);
}
}
namespace TraceSource {
export const DebugLevel = 400;
export const LogLevel = 300;
export const WarnLevel = 200;
export const ErrorLevel = 100;
export const SilentLevel = 0;
}
export = TraceSource;