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/

<*> 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/
 



Reply via email to