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 }