You need access to the EventDispatcher, which is natively mixed in with any
UIObject subclass (which is why all MXML components can use it.
You can either subclass your class from UIObject, or initialize the Event
Dispatcher with your class. The latter would look like this:
import mx.events.EventDispatcher;
function YourConstructor(){
EventDispatcher.initialize(this);
}
At 05:49 PM 4/29/2005, you wrote:
>I'm trying to wrap an XMLSocket object in a singleton class to manage
>my (single) XMLSocket connection, but I can't seem to get it to throw
>any events. Is it that I need to put it into my .mxml file as a
>component or something? Right now it is just an actionScript class.
>I was wanting to stick to the cairngorm framework's delegate model, but
>my SocketManager actually initiates commands from the server it is
>connected to (the whole point of my XMLSocket) so this class will need
>to dispatch a bunch events, preferably using the
>addEventListener+dispatchEvent model.
>
>Whenever the socket connection succeeds, I get my "SocketManager:
>Socket connection attempt succeeded" trace statement, then I get a
>warning which says "Warning: dispatchEvent is not a function" which
>leads me to believe that the EventDispatcher voodoo I'm doing in my
>constructor isn't working. Is it possible to send events like this?
>
>Any help is appreciated.
>
>Thanks,
>Sean McKibben
>
>(code below)
>
>import com.iterationtwo.cairngorm.business.*;
>import mx.utils.Delegate;
>import mx.events.*;
>[Event("onSocketOpen")]
>[Event("onSocketClose")]
>class com.client.capture.business.SocketManager extends MovieClip
>//(also tried extending mx.core.UIObject and nothing)
>{
> public static var socketManager:SocketManager;
> private static var mySocket:XMLSocket;
> private static var isSocketConnected:Boolean = false;
>
> public var addEventListener:Function;
> public var removeEventListener:Function;
> private var dispatchEvent:Function;
>
> public function SocketManager()
> {
> if ( SocketManager.socketManager != undefined )
> throw new Error("Only one SocketManager should be
> instantiated");
> SocketManager.mySocket = new XMLSocket();
> SocketManager.mySocket.onConnect = handleConnect;
> SocketManager.mySocket.onClose = handleClose;
> SocketManager.mySocket.onXML = handleIncoming;
> SocketManager.socketManager = this;
> var sm:Object = SocketManager.prototype;
> EventDispatcher.initialize(sm);//also tried
>UIEventDispatcher.initialize
> }
> public static function getInstance():SocketManager
> {
> if(SocketManager.socketManager == undefined)
> SocketManager.socketManager = new SocketManager();
> return SocketManager.socketManager;
> }
> public function connect()
> {
> if(!SocketManager.isSocketConnected)
> {
> if (!SocketManager.mySocket.connect("localhost",
> 1249))//<--INSERT
>PORT # HERE!!
> throw new Error("SocketManager: socket connection
> attempt failed
>early");
> }
> else
> throw new Error("SocketManager: connect method called
> while
>connected");
> }
> public function disconnect()
> {
> if(SocketManager.isSocketConnected)
> {
> SocketManager.mySocket.close();
> SocketManager.isSocketConnected = false;
> trace("SocketManager: closed socket");
> }
> else
> throw new Error("SocketManager: disconnect method
> called while not
>connected");
> }
> private function handleConnect (succeeded) {
> if(succeeded) {
> trace("SocketManager: Socket connection attempt
> succeeded");
> SocketManager.isSocketConnected = true;
> dispatchEvent({type:"onSocketOpen"});
> } else {
> throw new Error("SocketManager: Socket connection
> attempt failed");
> }
> }
> private function handleClose () {
> trace("SocketManager: server closed connection");
> SocketManager.isSocketConnected = false;
> dispatchEvent({type:"onSocketClose"});
> }
> private function handleIncoming (messageObj) {
>
> // display the received xml data in the output window
> trace(">>" + messageObj.toString() + "<<");
> }
>}
>
>
>then, in other objects i have
>SocketManager.getInstance().addEventListener("onSocketOpen",
>mx.utils.Delegate.create(this,onSocketOpen));
>
>but it never gets called...
>
>
>
>
>
>----------
>Yahoo! Groups Links
> * To visit your group on the web, go to:
> *
> <http://groups.yahoo.com/group/flexcoders/>http://groups.yahoo.com/group/flexcoders/
>
>
> *
> * To unsubscribe from this group, send an email to:
> *
> <mailto:[EMAIL PROTECTED]>[EMAIL PROTECTED]
>
> *
> * Your use of Yahoo! Groups is subject to the
> <http://docs.yahoo.com/info/terms/>Yahoo! Terms of Service.
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/