afcs -- chaining of events

Avatar

Avatar

DaddyDog1

Avatar

DaddyDog1

DaddyDog1

20-11-2009

Hi All,

After writing and delivering my first AFCS chat app, I'm looking for ways to better organize the code. I seem to do alot of chaining of events and similar.  Has anyone had any luck integrating AFCS with an mvcs framework?  Where would I begin.

Short of this can anyone recommend some design patterns which would help me chain events and references to samples using the same?

Thanks!

--Doug

View Entire Topic

Avatar

Avatar

coulix

Avatar

coulix

coulix

26-11-2009

I have it well integrated with pure MVC

I would recommend having a look at robot legs tho.

Here is the architecture for the Chat Module of Edoboard:


View: ChatView.xml

The layout of your chat.

Vbox, TextArea, Input, Send button etc..

Model Proxy: ChatProxy.as

Hold a reference to _chatModel:SimpleChatModel

override public function onRegister():void {

            // Afcs model
            _chatModel = new SimpleChatModel();
            _chatModel.sharedID = "edoboardChat";
            _chatModel.connectSession = ConnectSession.primarySession;
            _chatModel.subscribe();
            _chatModel.addEventListener(ChatEvent.HISTORY_CHANGE, onChatMsg);
}

We get the connection from the singleton ConnectSession, we could / should have a proxy to manage AFCS connection.

The proxy data is an array collection i use to hold messages, not usefull actualy but who knows.

onChatMsg i fire a notification

private function onChatMsg(e:ChatEvent):void {
            if (e.message != null )
                sendNotification(ApplicationFacade.CHAT_HISTORY, e.message);
}       

Mediator ChatMediator.as

It keeps a reference to _chatProxy and _userProxy which i used to get the current user First Name or the list of users connected.

Chat mediator listen for ApplicationFacade.CHAT_HISTORY notification.


override public function listNotificationInterests():Array {
            return [  ApplicationFacade.CHAT_HISTORY ];
        }

    override public function onRegister():void {
            _chatProxy = facade.retrieveProxy(ChatProxy.NAME) as ChatProxy;   
            _userProxy = facade.retrieveProxy(UsersProxy.NAME) as UsersProxy;   

               
            // Listeners
            chatView.chatButton.addEventListener(MouseEvent.CLICK, submitChat);     
        }

Lets sublmit message on click:

private function submitChat(e:MouseEvent):void {
            if(chatView.inputText.text != "") {
                var chatMessageDesc:ChatMessageDescriptor = new ChatMessageDescriptor();
                // Get my frstname
                chatMessageDesc.displayName = _userProxy.myUserName;
                chatMessageDesc.msg =  chatView.formatMessage(chatView.inputText.text);


                // publish
                _chatProxy.sendMessage(chatMessageDesc);


                chatView.clearInput();
                chatView.inputText.setFocus(); 
            }
}

Notification Handling

        override public function handleNotification( note:INotification ):void {
            switch ( note.getName() ) {
                case ApplicationFacade.CHAT_HISTORY:
                        /* [..] simplified for example */
                        var msgDescriptor:ChatMessageDescriptor = note.getBody() as ChatMessageDescriptor;
                         chatView.addMessage(msgDescriptor.msg);

                    break;
            }
        }

Hope that gives you an idea of how to integrate afcs in a flex/as3 framework.