001 package com.croftsoft.apps.chat;
002
003 import java.awt.*;
004 import java.awt.event.*;
005 import java.io.*;
006 import java.net.*;
007 import java.util.*;
008 import javax.swing.*;
009
010 import com.croftsoft.core.gui.LifecycleWindowListener;
011 import com.croftsoft.core.io.SerializableCoder;
012 import com.croftsoft.core.lang.lifecycle.LifecycleLib;
013 import com.croftsoft.core.math.MathConstants;
014 import com.croftsoft.core.net.http.HttpLib;
015 import com.croftsoft.core.net.http.msg.HttpMessageClient;
016 import com.croftsoft.core.security.Authentication;
017 import com.croftsoft.core.util.consumer.Consumer;
018 import com.croftsoft.core.util.queue.Queue;
019
020 import com.croftsoft.apps.chat.client.ChatClient;
021 import com.croftsoft.apps.chat.controller.ChatController;
022 import com.croftsoft.apps.chat.view.ChatPanel;
023
024 /*********************************************************************
025 * Chat applet with 2D sprite avatars.
026 *
027 * @version
028 * 2003-06-17
029 * @since
030 * 2000-04-24
031 * @author
032 * <a href="http://www.CroftSoft.com/">David Wallace Croft</a>
033 *********************************************************************/
034
035 public final class ChatApplet
036 extends JApplet
037 //////////////////////////////////////////////////////////////////////
038 //////////////////////////////////////////////////////////////////////
039 {
040
041 //////////////////////////////////////////////////////////////////////
042 // frame constants
043 //////////////////////////////////////////////////////////////////////
044
045 private static final String FRAME_ICON_FILENAME = null;
046
047 private static final Dimension FRAME_SIZE = null;
048
049 private static final String SHUTDOWN_CONFIRMATION_PROMPT = null;
050
051 private static final boolean USE_FULL_SCREEN_TOGGLER = true;
052
053 //////////////////////////////////////////////////////////////////////
054 // network constants
055 //////////////////////////////////////////////////////////////////////
056
057 private static final String SERVLET_PATH = "servlet";
058
059 //////////////////////////////////////////////////////////////////////
060 // instance variables
061 //////////////////////////////////////////////////////////////////////
062
063 private ChatClient chatClient;
064
065 private ChatPanel chatPanel;
066
067 //////////////////////////////////////////////////////////////////////
068 // static methods
069 //////////////////////////////////////////////////////////////////////
070
071 public static void main ( String [ ] args )
072 throws Exception
073 //////////////////////////////////////////////////////////////////////
074 {
075 LifecycleWindowListener.launchAppletAsDesktopApp (
076 new ChatApplet ( ),
077 ChatConstants.TITLE,
078 FRAME_ICON_FILENAME,
079 ChatApplet.class.getClassLoader ( ),
080 USE_FULL_SCREEN_TOGGLER,
081 FRAME_SIZE,
082 SHUTDOWN_CONFIRMATION_PROMPT );
083 }
084
085 //////////////////////////////////////////////////////////////////////
086 // overridden applet methods
087 //////////////////////////////////////////////////////////////////////
088
089 public String getAppletInfo ( ) { return ChatConstants.INFO; }
090
091 public void init ( )
092 //////////////////////////////////////////////////////////////////////
093 {
094 System.out.println ( getAppletInfo ( ) );
095
096 // model
097
098 Authentication authentication = getAuthentication ( );
099
100 chatClient = new ChatClient ( authentication, getServletURL ( ) );
101
102 // controller
103
104 ChatController chatController = new ChatController (
105 authentication, chatClient.getRequestQueue ( ) );
106
107 // view
108
109 chatPanel = new ChatPanel (
110 chatClient.getEventQueue ( ) , chatController );
111
112 setJMenuBar ( chatPanel.getMenuBar ( ) );
113
114 Container contentPane = getContentPane ( );
115
116 contentPane.setLayout ( new BorderLayout ( ) );
117
118 contentPane.add ( chatPanel, BorderLayout.CENTER );
119
120 LifecycleLib.init ( chatPanel );
121
122 validate ( );
123
124 LifecycleLib.init ( chatClient );
125 }
126
127 public void start ( )
128 //////////////////////////////////////////////////////////////////////
129 {
130 LifecycleLib.start ( chatPanel );
131
132 LifecycleLib.start ( chatClient );
133 }
134
135 public void stop ( )
136 //////////////////////////////////////////////////////////////////////
137 {
138 LifecycleLib.stop ( chatClient );
139
140 LifecycleLib.stop ( chatPanel );
141 }
142
143 public void destroy ( )
144 //////////////////////////////////////////////////////////////////////
145 {
146 LifecycleLib.destroy ( chatClient );
147
148 LifecycleLib.destroy ( chatPanel );
149 }
150
151 //////////////////////////////////////////////////////////////////////
152 // private methods
153 //////////////////////////////////////////////////////////////////////
154
155 private static Authentication getAuthentication ( )
156 //////////////////////////////////////////////////////////////////////
157 {
158 String username = Long.toString ( new Random ( ).nextLong ( ) );
159
160 return new Authentication ( username, "password" );
161 }
162
163 private URL getServletURL ( )
164 //////////////////////////////////////////////////////////////////////
165 {
166 URL codeBaseURL = null;
167
168 try
169 {
170 codeBaseURL = getCodeBase ( );
171 }
172 catch ( Exception ex )
173 {
174 }
175
176 try
177 {
178 if ( codeBaseURL != null )
179 {
180 return new URL ( codeBaseURL, SERVLET_PATH );
181 }
182 else
183 {
184 return null;
185 }
186 }
187 catch ( MalformedURLException ex )
188 {
189 // this should never happen if SERVLET_PATH is good
190
191 ex.printStackTrace ( );
192
193 return null;
194 }
195 }
196
197 //////////////////////////////////////////////////////////////////////
198 //////////////////////////////////////////////////////////////////////
199 }