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 :
/**
 * @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);
                }
        }
}
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" :P 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))

::Télécharger SOSTracer.zip::