source: java-rpg-server/LostHavenServer.java@ 4fbc6ff

Last change on this file since 4fbc6ff was 4fbc6ff, checked in by dportnoy <dmp1488@…>, 17 years ago

[svn r31]

  • Property mode set to 100644
File size: 8.8 KB
Line 
1import java.net.*;
2import java.io.*;
3import java.text.*;
4import java.util.*;
5//import java.util.concurrent.*;
6import java.awt.image.*;
7
8/*
9 * This class initializes the server and then waits for a connection from the portal.
10 */
11
12public class LostHavenServer {
13 public HashMap<String, Player> registered;
14 public HashMap<String, Client> online;
15 public PriorityQueue<String> orderedReg;
16 public PriorityQueue<String> orderedOnline;
17 public HashMap<LandType, Land> landMap;
18 public HashMap<StructureType, Structure> structMap;
19 public Map map;
20
21 public boolean running = false;
22
23 private ServerSocket serverSocket;
24 private ServerSocket portalSocket;
25 public ProcessingThread process;
26
27 public LostHavenServer() {
28 Runtime.getRuntime().addShutdownHook(new ShutdownHook(this));
29 online = new HashMap<String, Client>();
30 registered = new HashMap<String, Player>();
31 orderedReg = new PriorityQueue<String>(11, new PlayerComparator());
32 orderedOnline = new PriorityQueue<String>(11, new PlayerComparator());
33 loadRegistered();
34 loadMap();
35 map = new Map("mapInfo.txt", "structInfo.txt", landMap, structMap);
36 updateLog("serverlog.txt", "Application opened on " + dateString());
37
38 try {
39 portalSocket = new ServerSocket(5829);
40 while(true) {
41 new PortalInterfaceThread(portalSocket.accept(), this).start();
42 }
43 } catch(SocketException se) {
44 } catch(IOException ioe) {
45 ioe.printStackTrace();
46 }
47 }
48
49 public void start() {
50 try {
51 if(!running) {
52 running = true;
53 process = new ProcessingThread(this);
54 process.start();
55 serverSocket = new ServerSocket(5729);
56 new ClientListener(serverSocket, this).start();
57 updateLog("serverlog.txt", "Server started on " + dateString());
58 }
59 }catch (IOException ioe) {
60 ioe.printStackTrace();
61 }
62 }
63
64 public void stop() {
65 try {
66 if(running) {
67 running = false;
68 saveRegistered();
69 serverSocket.close();
70 updateLog("serverlog.txt", "Server shut down on " + dateString());
71 }
72 }catch (IOException ioe) {
73 ioe.printStackTrace();
74 }
75 }
76
77 public void addRegList(String str, Player player) {
78 registered.put(str, player);
79 orderedReg.add(str);
80 }
81
82 public void addOnlineList(String str, Client client) {
83 online.put(str, client);
84 orderedOnline.add(str);
85 }
86
87 public void removeOnlineList(String str) {
88 orderedOnline.remove(str);
89 online.remove(str);
90 }
91
92 public void sendAll(MessageType type, String s)
93 {
94 Iterator<Client> iter = online.values().iterator();
95 Client cur;
96
97 while(iter.hasNext())
98 {
99 cur = iter.next();
100 cur.getOut().println(type);
101 cur.getOut().println(s);
102 }
103 }
104
105 private void loadRegistered() {
106 BufferedReader in = null;
107 Player player;
108 int id;
109 String name, pass;
110
111 registered.clear();
112 online.clear();
113 orderedReg.clear();
114 orderedOnline.clear();
115
116 try {
117 in = new BufferedReader(new FileReader("chars.txt"));
118
119 while(in.ready()) {
120 id = Integer.parseInt(in.readLine());
121 name = in.readLine();
122 pass = in.readLine();
123 player = new Player(id, name, pass);
124
125 player.setGender(Gender.valueOf(in.readLine()));
126 player.setSpeed(Integer.parseInt(in.readLine()));
127 player.setSpeed(6);
128 player.setAttackSpeed(Integer.parseInt(in.readLine()));
129 player.setJob(Job.valueOf(in.readLine()));
130 player.setLevel(Integer.parseInt(in.readLine()));
131 player.setStrength(Integer.parseInt(in.readLine()));
132 player.setDexterity(Integer.parseInt(in.readLine()));
133 player.setConstitution(Integer.parseInt(in.readLine()));
134 player.setCharisma(Integer.parseInt(in.readLine()));
135 player.setWisdom(Integer.parseInt(in.readLine()));
136 player.setIntelligence(Integer.parseInt(in.readLine()));
137 player.setDamage(Integer.parseInt(in.readLine()));
138 player.setExperience(Integer.parseInt(in.readLine()));
139 player.setHitpoints(Integer.parseInt(in.readLine()));
140 player.setMaxHitpoints(Integer.parseInt(in.readLine()));
141 player.setManapoints(Integer.parseInt(in.readLine()));
142 player.setMaxManapoints(Integer.parseInt(in.readLine()));
143 player.setGold(Integer.parseInt(in.readLine()));
144
145 addRegList(name, player);
146 }
147
148 in.close();
149 } catch(IOException ioe) {
150 ioe.printStackTrace();
151 }
152 }
153
154 private void loadMap() {
155 landMap = new HashMap<LandType, Land>();
156 structMap = new HashMap<StructureType, Structure>();
157 BufferedImage nullImg = null;
158
159 landMap.put(LandType.Ocean, new Land(LandType.Ocean, nullImg, false));
160 landMap.put(LandType.Grass, new Land(LandType.Grass, nullImg, true));
161
162 structMap.put(StructureType.None, new Structure(StructureType.None, nullImg, false));
163 structMap.put(StructureType.BlueOrb, new Structure(StructureType.BlueOrb, nullImg, false));
164 structMap.put(StructureType.Cave, new Structure(StructureType.Cave, nullImg, false));
165 structMap.put(StructureType.Gravestone, new Structure(StructureType.Gravestone, nullImg, false));
166 structMap.put(StructureType.GraveyardFence1, new Structure(StructureType.GraveyardFence1, nullImg, false));
167 structMap.put(StructureType.GraveyardFence2, new Structure(StructureType.GraveyardFence2, nullImg, false));
168 structMap.put(StructureType.PicketFence1, new Structure(StructureType.PicketFence1, nullImg, false));
169 structMap.put(StructureType.PicketFence2, new Structure(StructureType.PicketFence2, nullImg, false));
170 structMap.put(StructureType.Hut, new Structure(StructureType.Hut, nullImg, false));
171 structMap.put(StructureType.WitchHut, new Structure(StructureType.WitchHut, nullImg, false));
172 structMap.put(StructureType.Tent, new Structure(StructureType.Tent, nullImg, false));
173 structMap.put(StructureType.LargeTent, new Structure(StructureType.LargeTent, nullImg, false));
174 structMap.put(StructureType.House, new Structure(StructureType.House, nullImg, false));
175 structMap.put(StructureType.Tree, new Structure(StructureType.Tree, nullImg, false));
176 structMap.put(StructureType.BlueOrb, new Structure(StructureType.BlueOrb, nullImg, false));
177 structMap.put(StructureType.RedOrb, new Structure(StructureType.RedOrb, nullImg, false));
178 structMap.put(StructureType.LoginPedestal, new Structure(StructureType.LoginPedestal, nullImg, true));
179 structMap.put(StructureType.RejuvenationPedestal, new Structure(StructureType.RejuvenationPedestal, nullImg, true));
180 structMap.put(StructureType.LifePedestal, new Structure(StructureType.LifePedestal, nullImg, true));
181 structMap.put(StructureType.ManaPedestal, new Structure(StructureType.ManaPedestal, nullImg, true));
182 }
183
184 private void saveRegistered() {
185 PrintWriter out = null;
186 Iterator<String> iter = orderedReg.iterator();
187 Player cur;
188
189 try {
190 out = new PrintWriter(new FileWriter("chars.txt"));
191 } catch(IOException ioe) {
192 ioe.printStackTrace();
193 }
194
195 while(iter.hasNext())
196 {
197 cur = registered.get(iter.next());
198 out.println(cur.getId());
199 out.println(cur.getName());
200 out.println(cur.getPass());
201 out.println(cur.getGender());
202 out.println(cur.getSpeed());
203 out.println(cur.getAttackSpeed());
204 out.println(cur.getJob());
205 out.println(cur.getLevel());
206 out.println(cur.getStrength());
207 out.println(cur.getDexterity());
208 out.println(cur.getConstitution());
209 out.println(cur.getCharisma());
210 out.println(cur.getWisdom());
211 out.println(cur.getIntelligence());
212 out.println(cur.getDamage());
213 out.println(cur.getExperience());
214 out.println(cur.getHitpoints());
215 out.println(cur.getMaxHitpoints());
216 out.println(cur.getManapoints());
217 out.println(cur.getMaxManapoints());
218 out.println(cur.getGold());
219 }
220
221 out.close();
222 }
223
224 public void updateLog(String fileName, String message) {
225 try {
226 PrintWriter out = new PrintWriter(new FileWriter(fileName, true));
227 out.println(message);
228 out.close();
229 } catch(IOException ioe) {
230 ioe.printStackTrace();
231 }
232 }
233
234 public String dateString() {
235 return new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new Date());
236 }
237
238 public static void main(String[] args) {
239 new LostHavenServer();
240 }
241
242 private class PlayerComparator implements Comparator<String> {
243 public int compare(String str1, String str2) {
244 return registered.get(str1).getId() - registered.get(str2).getId();
245 }
246 }
247
248 private class ShutdownHook extends Thread {
249 LostHavenServer server;
250
251 public ShutdownHook(LostHavenServer server) {
252 this.server = server;
253 }
254
255 public void run() {
256 server.stop();
257 updateLog("serverlog.txt", "Application closed on " + dateString());
258 }
259 }
260}
Note: See TracBrowser for help on using the repository browser.