source: java-rpg-server/ServerThread.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: 7.0 KB
Line 
1import java.net.*;
2import java.util.*;
3
4/*
5 * This thread handles messages from clients.
6 */
7
8public class ServerThread extends Connection {
9 private LostHavenServer main;
10 private Player player;
11 private Client client;
12
13 public ServerThread(Socket socket, LostHavenServer main) {
14 super(socket, "ServerThread");
15 this.main = main;
16 }
17
18 protected void processMessage(MessageType type, String input) {
19 String user, pass;
20 Gender gender;
21 Job job;
22 String message;
23 String receiver = "";
24 String channel = "";
25
26 switch(type) {
27 case Chat:
28 if(input.indexOf("]") != -1 && (input.indexOf(">") == -1 || input.indexOf(">") > input.indexOf("]"))) {
29 channel = input.substring(0, input.indexOf("]"));
30 message = input.substring(input.indexOf("]")+1);
31 }else {
32 receiver = input.substring(0, input.indexOf(">"));
33 message = input.substring(input.indexOf(">")+1);
34 }
35
36 if(receiver.equals("")) {
37 main.updateLog("chatlog.txt", main.dateString() + " [" + channel + "] " + player.getName() + "> " + message);
38
39 if(channel.equals("None")) {
40 sendMessage(MessageType.Chat, player.getName() + "> " + message);
41 }else {
42 Iterator<String> iter = main.online.keySet().iterator();
43 String name;
44
45 while(iter.hasNext())
46 {
47 name = iter.next();
48 if(main.registered.get(name).getChannel().equals(channel)) {
49 main.online.get(name).getOut().println(MessageType.Chat);
50 main.online.get(name).getOut().println(player.getName() + "> " + message);
51 }
52 }
53 }
54 }else {
55 if(!main.registered.containsKey(receiver)) {
56 sendMessage(MessageType.Chat, "Player " + receiver + " does not exist.");
57 }else if(!main.online.containsKey(receiver)) {
58 sendMessage(MessageType.Chat, "Player " + receiver + " is not online.");
59 }else if(receiver.equals(player.getName())) {
60 sendMessage(MessageType.Chat, "Why are you sending a message to yourself?");
61 }else {
62 main.online.get(receiver).getOut().println(MessageType.Chat);
63 main.online.get(receiver).getOut().println("Private message from " + player.getName() + "> " + message);
64 sendMessage(MessageType.Chat, "Private message to " + receiver + "> " + message);
65
66 main.updateLog("chatlog.txt", main.dateString() + " Private message from " + player.getName() + " to " + receiver + "> " + message);
67 }
68 }
69 break;
70 case Channel:
71 player.setChannel(input);
72 sendMessage(MessageType.Channel, "");
73 break;
74 case Login:
75 user = input.substring(0, input.indexOf(";"));
76 input = input.substring(input.indexOf(";")+1);
77 pass = input;
78
79 if(!main.registered.containsKey(user))
80 sendMessage(MessageType.Login, "No such player exists");
81 else if(!main.registered.get(user).getPass().equals(pass))
82 sendMessage(MessageType.Login, "Incorrect password");
83 else if(main.online.containsKey(user))
84 sendMessage(MessageType.Login, "This player is already logged on");
85 else {
86 player = main.registered.get(user);
87 client.setTimeLoggedOn(Calendar.getInstance());
88 main.updateLog("playerlog.txt", "Player " + user + " logged in on " + main.dateString());
89 sendLoadInfo();
90 main.addOnlineList(user, client);
91 main.sendAll(MessageType.PlayerJoined, "Player " + player.getName() + " logged on");
92 }
93 break;
94 case Create:
95 user = input.substring(0, input.indexOf(";"));
96 input = input.substring(input.indexOf(";")+1);
97 pass = input.substring(0, input.indexOf(";"));
98 input = input.substring(input.indexOf(";")+1);
99 gender = Gender.valueOf(input.substring(0, input.indexOf(";")));
100 input = input.substring(input.indexOf(";")+1);
101 job = Job.valueOf(input);
102
103 if(main.registered.containsKey(user))
104 sendMessage(MessageType.Create, "Username already exists");
105 else {
106 player = new Player(main.orderedReg.size()+1, user, pass);
107 player.setGender(gender);
108 player.createJob(job);
109 main.addRegList(user, player);
110 main.updateLog("playerlog.txt", "Player " + user + " created on " + main.dateString());
111 sendMessage(MessageType.Create, "Account created successfully");
112 main.sendAll(MessageType.Registered, player.getId() + ";" + player.getName() + ";" + player.getGender()+ ";" + false);
113 }
114 break;
115 case Movement:
116 int y = Integer.valueOf(input.substring(0, input.indexOf(",")));
117 int x = Integer.valueOf(input.substring(input.indexOf(",")+1));
118
119 player.setTarget(new Point(x, y));
120 }
121 }
122
123 private void sendRegisteredPlayers() {
124 String[] reg;
125 Player p;
126 String str;
127
128 reg = (String[])main.orderedReg.toArray(new String[0]);
129 for(int x=0; x<main.orderedReg.size(); x++) {
130 p = main.registered.get(reg[x]);
131
132 str = p.getId() + ";" + p.getName() + ";" + p.getGender() + ";" + main.online.containsKey(p.getName());
133 sendMessage(MessageType.Registered, str);
134 }
135 }
136
137 private void sendLoadInfo() {
138 sendMessage(MessageType.LoadStart, Integer.toString(main.orderedReg.size()+main.map.getLength()*main.map.getHeight()+3));
139 sendRegisteredPlayers();
140 sendMessage(MessageType.LoadMap, main.map.getLength()+"x"+main.map.getHeight());
141
142 for(int x=0; x<main.map.getLength(); x++) {
143 for(int y=0; y<main.map.getHeight(); y++) {
144 sendMessage(MessageType.LoadMap, x+","+y+" "+main.map.getLoc(x, y).getLand().getType().toString()+" "+main.map.getLoc(x, y).getStruct().getType().toString());
145 }
146 }
147
148 sendMessage(MessageType.LoadEnd, "");
149 }
150
151 protected void connectionStart() {
152
153 }
154
155 protected void connectionSuccess() {
156 client = new Client(getOut());
157 }
158
159 protected void connectionFailure() {
160
161 }
162
163 protected void connectionBreak() {
164 if(player != null && main.online.containsKey(player.getName())) {
165 main.removeOnlineList(player.getName());
166 main.updateLog("playerlog.txt", "Player " + player.getName() + " disconnected unexpectedly on " + main.dateString());
167 main.sendAll(MessageType.PlayerLeft, "Player " + player.getName() + " disconnected unexpectedly");
168 }
169 }
170
171 protected void peerDisconnect() {
172 if(player != null && main.online.containsKey(player.getName())) {
173 main.removeOnlineList(player.getName());
174 main.updateLog("playerlog.txt", "Player " + player.getName() + " logged off on " + main.dateString());
175 main.sendAll(MessageType.PlayerLeft, "Player " + player.getName() + " logged off");
176 }
177 }
178
179 protected void connectionEnd() {
180
181 }
182}
Note: See TracBrowser for help on using the repository browser.