001 package com.croftsoft.apps.ajgp.http;
002
003 import java.io.*;
004
005 import javax.servlet.*;
006 import javax.servlet.http.*;
007
008 import com.croftsoft.core.CroftSoftConstants;
009 import com.croftsoft.core.io.Encoder;
010 import com.croftsoft.core.io.Parser;
011 import com.croftsoft.core.io.SerializableLib;
012 import com.croftsoft.core.io.StringCoder;
013 import com.croftsoft.core.role.Server;
014 import com.croftsoft.core.servlet.HttpGatewayServlet;
015
016 /*********************************************************************
017 * High score servlet.
018 *
019 * @version
020 * $Date: 2008/04/19 21:30:59 $
021 * @since
022 * 2003-06-01
023 * @author
024 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
025 *********************************************************************/
026
027 public final class ScoreServlet
028 extends HttpGatewayServlet
029 //////////////////////////////////////////////////////////////////////
030 //////////////////////////////////////////////////////////////////////
031 {
032
033 private static final String VERSION = "2003-06-03";
034
035 private static final String TITLE = "CroftSoft ScoreServlet";
036
037 private static final String SERVLET_INFO
038 = "\n" + TITLE
039 + "\n" + CroftSoftConstants.COPYRIGHT
040 + "\n" + CroftSoftConstants.HOME_PAGE
041 + "\n" + "Version " + VERSION
042 + "\n" + CroftSoftConstants.DEFAULT_LICENSE
043 + "\n";
044
045 private static final String PRIMARY_FILENAME = "score.dat";
046
047 private static final String BACKUP_FILENAME = "score.bak";
048
049 private static final String CHAR_SET_NAME = StringCoder.UTF_8;
050
051 private static final String GET_REQUEST = "get";
052
053 private static final String SET_REQUEST = "set ";
054
055 private static final StringCoder STRING_CODER
056 = new StringCoder ( CHAR_SET_NAME );
057
058 //
059
060 private Long highScoreLong;
061
062 //////////////////////////////////////////////////////////////////////
063 // constructor methods
064 //////////////////////////////////////////////////////////////////////
065
066 public ScoreServlet ( )
067 //////////////////////////////////////////////////////////////////////
068 {
069 super ( ( Server ) null, STRING_CODER, STRING_CODER );
070 }
071
072 //////////////////////////////////////////////////////////////////////
073 // overridden Servlet methods
074 //////////////////////////////////////////////////////////////////////
075
076 public String getServletInfo ( ) { return SERVLET_INFO; }
077
078 public void init ( )
079 throws ServletException
080 //////////////////////////////////////////////////////////////////////
081 {
082 System.out.println ( SERVLET_INFO );
083
084 try
085 {
086 highScoreLong = ( Long )
087 SerializableLib.load ( PRIMARY_FILENAME, BACKUP_FILENAME );
088 }
089 catch ( FileNotFoundException ex )
090 {
091 }
092 catch ( Exception ex )
093 {
094 log ( ex.getMessage ( ), ex );
095 }
096
097 if ( highScoreLong == null )
098 {
099 highScoreLong = new Long ( 0 );
100 }
101 }
102
103 public void destroy ( )
104 //////////////////////////////////////////////////////////////////////
105 {
106 try
107 {
108 SerializableLib.save (
109 highScoreLong, PRIMARY_FILENAME, BACKUP_FILENAME );
110 }
111 catch ( Exception ex )
112 {
113 log ( ex.getMessage ( ), ex );
114 }
115 }
116
117 //////////////////////////////////////////////////////////////////////
118 // overridden HttpGatewayServlet methods
119 //////////////////////////////////////////////////////////////////////
120
121 protected Object serve ( Object request )
122 //////////////////////////////////////////////////////////////////////
123 {
124 String requestString
125 = ( ( String ) request ).trim ( ).toLowerCase ( );
126
127 if ( requestString.equals ( GET_REQUEST ) )
128 {
129 return highScoreLong;
130 }
131
132 if ( requestString.startsWith ( SET_REQUEST ) )
133 {
134 String newHighScoreString
135 = requestString.substring ( SET_REQUEST.length ( ) );
136
137 long newHighScore = Long.parseLong ( newHighScoreString );
138
139 synchronized ( this )
140 {
141 if ( newHighScore > highScoreLong.longValue ( ) )
142 {
143 highScoreLong = new Long ( newHighScore );
144 }
145 }
146
147 return null;
148 }
149
150 throw new IllegalArgumentException ( );
151 }
152
153 //////////////////////////////////////////////////////////////////////
154 //////////////////////////////////////////////////////////////////////
155 }