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="http://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 }