Вариация: сервер на Neko, клиент на flash8

Всё это хорошо, но меня немного смущает сам факт, что сервер мы пишем на Ruby. Ничего против него не имею, но мы же изучаем haXe и в том и фишка, чтобы всё на одном языке писать и одним компилятором компилировать - и сервер и клиент.
Я пока мало знаком с программированием для платформы Neko, но перечитав http://haxe.org/doc/neko/client_server и погуглив немного накидал нечто подобное вышеприведённому серверу на haXe:

class Server {
    static function main()
        {              
                var s = new neko.net.Socket();
                s.bind(new neko.net.Host("localhost"),4444);
                s.listen(1);
                trace("Starting server...");
                while( true )
                {
                        var c : neko.net.Socket = s.accept();
                        trace("Client connected..." + c.peer().host.toString());

                        c.output.write("Hello from server");  // шлём привет клиенту от сервера
                        c.output.writeChar(0);                 
                       
                        var msg;
                        while ( (msg = c.input.readUntil(0)) != null ) {
                                trace(msg);
                        }

                        c.close();
                }
            }
}

всё, что связано с loadPolicyFile я убрал, т.к. на самом деле это не так уж и нужно, можно просто компилировать клиент с флагом -D network-sandbox и соединение будет устанавливаться без проблем.

Код этот конечно пионерский, не без применения метода "научного тыка" и где-то в части связанной с чтением ввода я накосячил, так что сервер пока получился одноразового применения :) , но основа работает и показывает что серверную часть можно и нужно писать на haXe, а детали потом доизучим и поправим. ;)

В API neko.net.Socket совсем пока не знаю, как работать с некоторыми методами, особенно в плане ввода/вывода. Например там есть метод с вроде бы подходящим названием waitForRead, но как его применять, пока не разобрался.

Клиент можно использовать тот же (не забыв про флаг -D network-sandbox при компиляции, о котором я выше писал). Я бы правда назначал слушателей перед соединением с сервером, надёжнее имхо:

socket = new XMLSocket();
socket.addEventListener(Event.CONNECT, OnConnect);
socket.addEventListener(DataEvent.DATA, OnData);
socket.addEventListener(Event.CLOSE, OnClose);
socket.addEventListener(IOErrorEvent.IO_ERROR, OnIOError);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, OnSecurityError);
socket.connect('localhost', 4444);

Ну а заодно приведу и другой вариант клиента - для flash8, он покороче:

import flash.XMLSocket;

class Flash8Socket
{
        static var socket :XMLSocket;
       
        public static function main() :Void
        {
          socket  = new XMLSocket();

         
          socket.onConnect = function(success :Bool) :Void
          {
                if ( success ) {
                        trace("Успешное соединение!");
                        socket.send("Hello from flash8");
                        socket.send("second line");
                }
                else trace("Ошибка соединения");
          }
         

         
          socket.onData = function(msg :String) :Void {
                trace("Получено с сервера : " + msg);
          }

         
          socket.onClose = function() :Void {
                trace("Соединение закрыто");
          }

         
          trace("Соединение...");
          socket.connect( "localhost", 4444 );
         }
}