001         package com.croftsoft.apps.chat.view;
002    
003         import com.croftsoft.core.animation.model.Model;
004         import com.croftsoft.core.animation.model.ModelId;
005         import com.croftsoft.core.lang.NullArgumentException;
006         import com.croftsoft.core.math.geom.PointXY;
007    import com.croftsoft.core.util.consumer.Consumer;
008    
009         import com.croftsoft.apps.chat.event.CreateModelEvent;
010         import com.croftsoft.apps.chat.event.MoveEvent;
011         import com.croftsoft.apps.chat.event.NullEvent;
012         import com.croftsoft.apps.chat.event.RemoveModelEvent;
013         import com.croftsoft.apps.chat.model.ChatGame;
014         import com.croftsoft.apps.chat.model.ChatModel;
015         import com.croftsoft.apps.chat.model.ChatWorld;
016    import com.croftsoft.apps.chat.response.ViewResponse;
017    
018         /*********************************************************************
019         * ChatGame synchronizer.
020         *
021         * @version
022         *   2003-06-18
023         * @since
024         *   2003-06-06
025         * @author
026         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
027         *********************************************************************/
028    
029         public final class  ChatSynchronizer
030           implements Consumer
031         //////////////////////////////////////////////////////////////////////
032         //////////////////////////////////////////////////////////////////////
033         {
034    
035         private final Consumer   eventConsumer;
036    
037         private final ChatWorld  chatWorld;
038    
039         //////////////////////////////////////////////////////////////////////
040         //////////////////////////////////////////////////////////////////////
041    
042         public  ChatSynchronizer (
043           ChatWorld  chatWorld,
044           Consumer   eventConsumer )
045         //////////////////////////////////////////////////////////////////////
046         {
047           NullArgumentException.check ( this.chatWorld     = chatWorld     );
048    
049    
050           NullArgumentException.check ( this.eventConsumer = eventConsumer );
051         }
052    
053         //////////////////////////////////////////////////////////////////////
054         //////////////////////////////////////////////////////////////////////
055    
056         public void  consume ( Object  o )
057         //////////////////////////////////////////////////////////////////////
058         {
059           if ( o instanceof ViewResponse )
060           {
061             ChatWorld  newChatWorld
062               = ( ( ViewResponse ) o ).getSeriChatWorld ( );
063    
064             chatWorld.clear ( );
065    
066             Model [ ]  models = newChatWorld.getModels ( );
067    
068             for ( int  i = 0; i < models.length; i++ )
069             {
070               ChatModel  chatModel = ( ChatModel ) models [ i ];
071    
072               chatModel.setEventConsumer ( eventConsumer );
073    
074               chatWorld.addChatModel ( chatModel );
075             }
076    
077             return;
078           }
079    
080           if ( o instanceof MoveEvent )
081           {
082             MoveEvent  moveEvent = ( MoveEvent ) o;
083    
084             ChatModel  chatModel
085               = chatWorld.getChatModel ( moveEvent.getModelId ( ) );
086    
087             if ( chatModel == null )
088             {
089               return;
090             }
091    
092             PointXY  origin = moveEvent.getOrigin ( );
093    
094             if ( origin != null )
095             {
096               chatModel.setCenter ( origin.getX ( ), origin.getY ( ) );
097             }
098    
099             chatModel.setDestination ( moveEvent.getDestination ( ) );
100    
101             return;
102           }
103    
104           if ( o instanceof CreateModelEvent )
105           {
106             ChatModel  chatModel
107               = ( ( CreateModelEvent ) o ).getChatModel ( );
108    
109             chatModel.setEventConsumer ( eventConsumer );
110    
111             chatWorld.addChatModel ( chatModel );         
112    
113             return;
114           }
115    
116           if ( o instanceof RemoveModelEvent )
117           {
118             ModelId  modelId = ( ( RemoveModelEvent ) o ).getModelId ( );
119    
120             ChatModel  chatModel = chatWorld.getChatModel ( modelId );
121    
122             chatModel.setActive ( false );
123    
124             return;
125           }
126         }
127    
128         //////////////////////////////////////////////////////////////////////
129         //////////////////////////////////////////////////////////////////////
130         }