Connecteur à la console SOS
Par -Alexandre LEGOUT aka LAlex- le jeudi, janvier 5 2006, 15:58 - AS2 - Lien permanent
Le passage à FDT n'est pas toujours sans douleurs... Les habitudes évoluent, et la façon de coder varie inmanquablement. Un des problèmes auxquels je me suis trouvé confronté a été l'utilisation de la commande 'trace', que l'on peut bien évidemment remplacer par un appel de méthode via l'option -trace de MTASC... Comme j'en ai déjà parlé, j'utilise la console SOS, pour le côté pratique de la connexion socket que sont la connexion à une console sur une machine distante, ou la gestion d'une couleur de fond différente par application (TRES utile !!!)
Le moyen que j'utilise aujourd'hui afin d'éviter les problèmes de non-importation de la classe s'occupant de se connecter à la console consiste à créer un petit répertoire utilitaire contenant les classes utiles à FDT, et de l'inclure dans mes "Linked librairies", et d'en appeler une méthode start(). Pour l'instant, seule le connecteur à la console est présent, mais il se peut que d'autres suivent (notamment mon petit framework de profiling, a venir plus tard :P)
Bref, voici ma classe SOSTracer, utilisée par MTASC avec l'option -trace SOSTracer.out :
/**
Le but est ici d'être indépendant de tout autre package, d'où l'utilisation d'une classe XMLSocket "de base" (j'en ai implémenté une plus évoluée), et l'utilisation d'un Delegate "à la main"
* @author LAlex
* @version 0.1
* @since 2006-01-05
*/
class SOSTracer {
// Console infos
public static var SOS_HOST:String = "localhost";
public static var SOS_PORT:Number = 4444;
// Used for static method 'out'
private static var __instance:SOSTracer;
// Used for line number display
private static var __lineNumber:Number = 1;
// Allow to display line numbers
public static var enableLineNumber:Boolean = false;
// Static function, used for MTASC -trace option
// SOSTracer.start() must be called before
public static function out(o) {
__instance.trace(o);
}
// Launch the static SOSTracer with
// given background color
public static function start(col:Number):Boolean {
__instance = new SOSTracer(col);
return true;
}
private var _bufferize:Boolean = true;
private var _socket: XMLSocket;
private var _isConnected:Boolean = false;
private var _color:Number;
// For later ;oP
// private var _itv:Number = -1;
// Buffer
private var _stack: Array;
function SOSTracer(col:Number) {
if (col != undefined) {
_color = col;
}
_stack = [];
_socket = new XMLSocket();
_socket.onConnect = function (suc) {
var tr = arguments.callee.tracer;
tr._connected(suc);
};
_socket.onConnect.tracer = this;
_socket.connect(SOS_HOST, SOS_PORT);
}
// Launched on socket connection
private function _connected(sc:Boolean) {
if (sc) {
if (_color != undefined) {
_socket.send("!SOS<appColor>" + _color + "</appColor>");
}
_flush();
_isConnected = true;
} else {
_bufferize = false;
throw new Error("SOS Socket connection failed");
}
}
// Flush buffer
private function _flush() {
while(_stack.length) _socket.send(_stack.shift());
}
// Display a string (or object representation)
public function trace(o) {
var no:String = (enableLineNumber ? "[" + __lineNumber++ + "] " : "") + o.toString();
if (_isConnected) {
_socket.send(no);
} else if (_bufferize) {
_stack.push(no);
}
}
}
Afin d'éviter de surcharger la connexion, je prévois ensuite d'utiliser un système de bufferisation éventuel, au moyen du buffer utilisé avant la connexion, et d'un setInterval (vous avez surement remarqué que la propriété pour l'intervalle est déjà prévue, mais pas utilisée encore :$).
Pour l'utiliser, rien de plus simple, je lance un start() dans mon main et j'utilise trace() dans mon code :
public static function main() {
SOSTracer.start(0XFFFFCC); // Couleur de fond dans la console
}
Pour le déploiement, il suffit de changer dans MTASC l'option -trace SOSTracer.out par -trace no, et de commenter la ligne SOSTracer.start() (pas de import à commenter, du fait de l'absence de package 8))
Commentaires
c'est vrai qu'il est bien ce SOS, j'aime beaucoup le filtre par expression
Oui, mais c'est pour ca que j'ai rajouté la possibilité de numéroter les lignes, parce que quand tu as 15000 lignes de traces, et que tu filtres, va les retrouver une fois enlevé le filtre!!!
Sinon, bien pratique les couleurs aussi quand tu as 4 SWF qui tournent...
j'ai testé un peu plus, et j'me suis rabattu sur les key pour appliquer des couleurs suivant le type de message plutot qu'appliquer une couleur à l'application
comme tu dis, c'est pratique quand on a plusieurs appli ouvertes
l'idéal, ca serait peut-être de pouvoir insérer dans un folder plus tard, ou de pouvoir appliquer plusieurs couleurs sur un message
au pire, si j'ai plusieurs appli qui tournent en même temps, j'vais envoyer le nom de l'appli pour le filtrer
Sympa, va bien faloir que je test SOSTracer un de ces quatre


Pour ceux qui ne sont pas gèné par une dépendance d'un package je peux vous conseiller de jetter un oeil au lgguer de pixLib. en deux lignes on passe de LumicBox à SOSTracer
Exemple
J'ai le probléme de temps en temps à la compilation, alors que ma licence est valide et si suffit que je recompile derrière pour que ca refonctionne.
Fil des commentaires de ce billet