У меня конечно изначально была идея взять за основу шаблон состояние:

Код AS3:
package server_exchange.socket_4444
{
// Состояние: Контекстный класс
internal class WorksSocket
{
/*//////////////////////////////////////
Список состояний
//////////////////////////////////////*/
// Соединение с сокетом не установлено (ожидаются действия)
private var state1No:IState;
// Соединение с сокетом устанавливается
private var state2SocketConnecting:IState;
// Соединение с сокетом успешно установлено (ожидаются действия)
private var state3SocketEstablished:IState;
// Выполняется отправка данных на сервер
private var state4SocketReading:IState;
// Выполняется приём данных с сервера
private var state5SocketWriting:IState;
// Текущее состояние
private var iStateSocket:IState;
public function WorksSocket()
{
// Инициализируем все конкретные состояния
this.state1No = new State1No(this);
this.state2SocketConnecting = new State2SocketConnecting(this);
this.state3SocketEstablished = new State3SocketEstablished(this);
this.state4SocketReading = new State4SocketReading(this);
this.state5SocketWriting = new State5SocketWriting(this);
// Устанавливаем первоначальный статус при инициализации конструктора
this.iStateSocket = this.state1No;
}
/*/////////////////////////////////////////////////////
Выполнение события в установленном состоянии
/////////////////////////////////////////////////////*/
public function set ExecuteState(comand:String):void
{
switch(comand)
{
case ComandName._command1SocketConnect: this.iStateSocket.Command1SocketConnect(); break;
case ComandName._command2SocketConnecting: this.iStateSocket.Command2SocketConnecting(); break;
case ComandName._command3SocketWrite: this.iStateSocket.Command3SocketWrite(); break;
case ComandName._command4SocketRead: this.iStateSocket.Command4SocketRead(); break;
}
}
/*/////////////////////////////////////////////////////
Устанавливает состояние
/////////////////////////////////////////////////////*/
public function set SetState(state:String):void
{
switch(state)
{
case StateName._state1No: this.iStateSocket = this.state1No; break;
case StateName._state2SocketConnecting: this.iStateSocket = this.state2SocketConnecting; break;
case StateName._state3SocketEstablished: this.iStateSocket = this.state3SocketEstablished; break;
case StateName._state4SocketReading: this.iStateSocket = this.state4SocketReading; break;
case StateName._state5SocketWriting: this.iStateSocket = this.state5SocketWriting; break;
}
}
} // Конец класса
} // Конец пакета
Интерфейс состояний:

Код AS3:
package server_exchange.socket_4444
{
// Состояние: команды для выполнения действий в каком-либо из состояний
internal interface IState
{
// Выполняет команду на соединение с сокетом
function Command1SocketConnect():void;
// Связь с сокетом устанавливается
function Command2SocketConnecting():void;
// Связь с сокетом установлена, выполняется отсылка данных на сервер (запись в сокет)
function Command3SocketWrite():void;
// Связь с сокетом установлена, выполняется приём данных с сервера (чтение из сокета)
function Command4SocketRead():void
}
}
Действия состояний:

Код AS3:
package server_exchange.socket_4444
{
// Действия, выполняемые в каком-либо состоянии
internal class ComandName
{
// Выполняет команду на соединение с сокетом
internal static const _command1SocketConnect:String = 'Command1SocketConnect';
// Связь с сокетом устанавливается
internal static const _command2SocketConnecting:String = 'Command2SocketConnecting';
// Связь с сокетом установлена, выполняется отсылка данных на сервер (запись в сокет)
internal static const _command3SocketWrite:String = 'Command3SocketWrite';
// Связь с сокетом установлена, выполняется приём данных с сервера (чтение из сокета)
internal static const _command4SocketRead:String = 'Command4SocketRead';
}
}
Непосредственно сами состояния:

Код AS3:
package server_exchange.socket_4444
{
// Конкретное состояние
internal class StateName
{
// Соединение с сокетом не установлено (ожидаются действия)
internal static const _state1No:String = 'State1No';
// Соединение с сокетом устанавливается
internal static const _state2SocketConnecting:String = 'State2SocketConnecting';
// Соединение с сокетом успешно установлено (ожидаются действия)
internal static const _state3SocketEstablished:String = 'State3SocketEstablished';
// Выполняется отправка данных на сервер
internal static const _state4SocketReading:String = 'State4SocketReading';
// Выполняется приём данных с сервера
internal static const _state5SocketWriting:String = 'State5SocketWriting';
}
}
Описание состояний:

Код AS3:
package server_exchange.socket_4444
{
internal class State1No implements IState
{
// Состояние
private var worksSocket:WorksSocket;
public function State1No(worksSocket:WorksSocket)
{
this.worksSocket = worksSocket;
}
// Выполняет команду на соединение с сокетом
public function Command1SocketConnect():void { }
// Связь с сокетом устанавливается
public function Command2SocketConnecting():void { }
// Связь с сокетом установлена, выполняется отсылка данных на сервер (запись в сокет)
public function Command3SocketWrite():void { }
// Связь с сокетом установлена, выполняется приём данных с сервера (чтение из сокета)
public function Command4SocketRead():void { }
}
}

Код AS3:
package server_exchange.socket_4444
{
internal class State2SocketConnecting implements IState
{
// Состояние
private var worksSocket:WorksSocket;
public function State2SocketConnecting(worksSocket:WorksSocket)
{
this.worksSocket = worksSocket;
}
// Выполняет команду на соединение с сокетом
public function Command1SocketConnect():void { }
// Связь с сокетом устанавливается
public function Command2SocketConnecting():void { }
// Связь с сокетом установлена, выполняется отсылка данных на сервер (запись в сокет)
public function Command3SocketWrite():void { }
// Связь с сокетом установлена, выполняется приём данных с сервера (чтение из сокета)
public function Command4SocketRead():void { }
}
}

Код AS3:
package server_exchange.socket_4444
{
internal class State3SocketEstablished implements IState
{
// Состояние
private var worksSocket:WorksSocket;
public function State3SocketEstablished(worksSocket:WorksSocket)
{
this.worksSocket = worksSocket;
}
// Выполняет команду на соединение с сокетом
public function Command1SocketConnect():void { }
// Связь с сокетом устанавливается
public function Command2SocketConnecting():void { }
// Связь с сокетом установлена, выполняется отсылка данных на сервер (запись в сокет)
public function Command3SocketWrite():void { }
// Связь с сокетом установлена, выполняется приём данных с сервера (чтение из сокета)
public function Command4SocketRead():void { }
}
}

Код AS3:
package server_exchange.socket_4444
{
internal class State4SocketReading implements IState
{
// Состояние
private var worksSocket:WorksSocket;
public function State4SocketReading(worksSocket:WorksSocket)
{
this.worksSocket = worksSocket;
}
// Выполняет команду на соединение с сокетом
public function Command1SocketConnect():void { }
// Связь с сокетом устанавливается
public function Command2SocketConnecting():void { }
// Связь с сокетом установлена, выполняется отсылка данных на сервер (запись в сокет)
public function Command3SocketWrite():void { }
// Связь с сокетом установлена, выполняется приём данных с сервера (чтение из сокета)
public function Command4SocketRead():void { }
}
}

Код AS3:
package server_exchange.socket_4444
{
internal class State5SocketWriting implements IState
{
// Состояние
private var worksSocket:WorksSocket;
public function State5SocketWriting(worksSocket:WorksSocket)
{
this.worksSocket = worksSocket;
}
// Выполняет команду на соединение с сокетом
public function Command1SocketConnect():void { }
// Связь с сокетом устанавливается
public function Command2SocketConnecting():void { }
// Связь с сокетом установлена, выполняется отсылка данных на сервер (запись в сокет)
public function Command3SocketWrite():void { }
// Связь с сокетом установлена, выполняется приём данных с сервера (чтение из сокета)
public function Command4SocketRead():void { }
}
}
А экземпляр самого XMLSocket вынести в контекстный класс

Код AS3:
package server_exchange.socket_4444
{
import flash.net.XMLSocket;
import flash.events.IEventDispatcher;
import flash.events.Event;
import flash.events.DataEvent;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
// Структута соединения на сокет
internal class StructSocket
{
private var socket:XMLSocket;
public function StructSocket()
{
this.socket = new XMLSocket();
configureListeners(socket);
if (hostName && port)
{
socket.connect(hostName, port);
}
}
public function send(data:Object):void
{
socket.send(data);
}
private function configureListeners(dispatcher:IEventDispatcher):void
{
dispatcher.addEventListener(Event.CLOSE, closeHandler);
dispatcher.addEventListener(Event.CONNECT, connectHandler);
dispatcher.addEventListener(DataEvent.DATA, dataHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
}
private function closeHandler(event:Event):void
{
trace("closeHandler: " + event);
}
private function connectHandler(event:Event):void
{
trace("connectHandler: " + event);
}
private function dataHandler(event:DataEvent):void
{
trace("dataHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void
{
trace("ioErrorHandler: " + event);
}
private function progressHandler(event:ProgressEvent):void
{
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}
private function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler: " + event);
}
} // Конец класса
} // Конец пакета
тогда в этом случе будет большое нагромождение, что вобщем-то и тормазнуло процесс дальнейшей разработки