source: java-rpg-server/ServerThread.java@ 243278b

Last change on this file since 243278b was 057edef, checked in by dportnoy <dmp1488@…>, 17 years ago

[svn r8]

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