密猟オンラインクライアントプログラム JAVAベース
サーバーに実装された管理者用機能に対応するコマンドを実装
| @@ -131,6 +131,11 @@ | ||
| 131 | 131 | Hunt.view_help(this); |
| 132 | 132 | break; |
| 133 | 133 | |
| 134 | + case '#': /* administrator command */ | |
| 135 | + | |
| 136 | + doAdministratorCommand(s); | |
| 137 | + break; | |
| 138 | + | |
| 134 | 139 | default: |
| 135 | 140 | MesgBox.MessageBox((Frame) Hunt.getMessageView(), |
| 136 | 141 | Hunt.getBundle(). |
| @@ -1122,6 +1127,134 @@ | ||
| 1122 | 1127 | return session.send_packet_c(buffer, 0); |
| 1123 | 1128 | } |
| 1124 | 1129 | |
| 1130 | + /* parse administrator command */ | |
| 1131 | + public void doAdministratorCommand(String s) { | |
| 1132 | + byte[] pusername; | |
| 1133 | + int nlen; | |
| 1134 | + int n; | |
| 1135 | + StringBuffer work = new StringBuffer(); | |
| 1136 | + s = Hunt.getToken(s, " ,", work); | |
| 1137 | + switch (work.charAt(2)) { | |
| 1138 | + case 'D': | |
| 1139 | + /* delete user */ | |
| 1140 | + Hunt.getToken(s, " ,", work); | |
| 1141 | + try { | |
| 1142 | + pusername = work.toString().getBytes(Hunt.SYSTEM_CHARSET); | |
| 1143 | + } catch (UnsupportedEncodingException e) { | |
| 1144 | + return; | |
| 1145 | + } | |
| 1146 | + nlen = Array.getLength(pusername); | |
| 1147 | + n = 2; | |
| 1148 | + buffer[0] = Hunt.HCLIT_DELUSER; | |
| 1149 | + if (nlen > Hunt.USERNAME_LEN) { | |
| 1150 | + nlen = Hunt.USERNAME_LEN; | |
| 1151 | + } | |
| 1152 | + System.arraycopy(pusername, 0, buffer, n, nlen); | |
| 1153 | + n += nlen; | |
| 1154 | + for (; nlen < Hunt.USERNAME_LEN; nlen++) { | |
| 1155 | + buffer[n++] = 0; | |
| 1156 | + } | |
| 1157 | + if (session.send_packet_c(buffer, n) == false) { | |
| 1158 | + System.out.println(Hunt.getBundle(). | |
| 1159 | + getString("ERRMESG_SENDPACKET")); | |
| 1160 | + Hunt.abort(); | |
| 1161 | + } | |
| 1162 | + break; | |
| 1163 | + case 'S': | |
| 1164 | + /* shutdown server */ | |
| 1165 | + buffer[0] = Hunt.HCLIT_SHUTDOWN; | |
| 1166 | + if (session.send_packet_c(buffer, 2) == false) { | |
| 1167 | + System.out.println(Hunt.getBundle(). | |
| 1168 | + getString("ERRMESG_SENDPACKET")); | |
| 1169 | + Hunt.abort(); | |
| 1170 | + } | |
| 1171 | + break; | |
| 1172 | + case 'P': | |
| 1173 | + /* get score */ | |
| 1174 | + Hunt.getToken(s, " ,", work); | |
| 1175 | + n = 2; | |
| 1176 | + buffer[0] = Hunt.HCLIT_ADMINCMD; | |
| 1177 | + buffer[n++] = 1; | |
| 1178 | + Hunt.htonl(Long.parseLong(work.toString()), buffer, n); | |
| 1179 | + n += 4; | |
| 1180 | + if (session.send_packet_c(buffer, n) == false) { | |
| 1181 | + System.out.println(Hunt.getBundle(). | |
| 1182 | + getString("ERRMESG_SENDPACKET")); | |
| 1183 | + Hunt.abort(); | |
| 1184 | + } | |
| 1185 | + break; | |
| 1186 | + case 'H': | |
| 1187 | + /* get HP */ | |
| 1188 | + Hunt.getToken(s, " ,", work); | |
| 1189 | + n = 2; | |
| 1190 | + buffer[0] = Hunt.HCLIT_ADMINCMD; | |
| 1191 | + buffer[n++] = 2; | |
| 1192 | + Hunt.htonl(Long.parseLong(work.toString()), buffer, n); | |
| 1193 | + n += 4; | |
| 1194 | + if (session.send_packet_c(buffer, n) == false) { | |
| 1195 | + System.out.println(Hunt.getBundle(). | |
| 1196 | + getString("ERRMESG_SENDPACKET")); | |
| 1197 | + Hunt.abort(); | |
| 1198 | + } | |
| 1199 | + break; | |
| 1200 | + case 'L': | |
| 1201 | + /* block user account */ | |
| 1202 | + Hunt.getToken(s, " ,", work); | |
| 1203 | + try { | |
| 1204 | + pusername = work.toString().getBytes(Hunt.SYSTEM_CHARSET); | |
| 1205 | + } catch (UnsupportedEncodingException e) { | |
| 1206 | + return; | |
| 1207 | + } | |
| 1208 | + nlen = Array.getLength(pusername); | |
| 1209 | + n = 2; | |
| 1210 | + buffer[0] = Hunt.HCLIT_JAILUSER; | |
| 1211 | + if (nlen > Hunt.USERNAME_LEN) { | |
| 1212 | + nlen = Hunt.USERNAME_LEN; | |
| 1213 | + } | |
| 1214 | + System.arraycopy(pusername, 0, buffer, n, nlen); | |
| 1215 | + n += nlen; | |
| 1216 | + for (; nlen < Hunt.USERNAME_LEN; nlen++) { | |
| 1217 | + buffer[n++] = 0; | |
| 1218 | + } | |
| 1219 | + buffer[n++] = 1; | |
| 1220 | + if (session.send_packet_c(buffer, n) == false) { | |
| 1221 | + System.out.println(Hunt.getBundle(). | |
| 1222 | + getString("ERRMESG_SENDPACKET")); | |
| 1223 | + Hunt.abort(); | |
| 1224 | + } | |
| 1225 | + break; | |
| 1226 | + case 'R': | |
| 1227 | + /* recover user account */ | |
| 1228 | + Hunt.getToken(s, " ,", work); | |
| 1229 | + try { | |
| 1230 | + pusername = work.toString().getBytes(Hunt.SYSTEM_CHARSET); | |
| 1231 | + } catch (UnsupportedEncodingException e) { | |
| 1232 | + return; | |
| 1233 | + } | |
| 1234 | + nlen = Array.getLength(pusername); | |
| 1235 | + n = 2; | |
| 1236 | + buffer[0] = Hunt.HCLIT_JAILUSER; | |
| 1237 | + if (nlen > Hunt.USERNAME_LEN) { | |
| 1238 | + nlen = Hunt.USERNAME_LEN; | |
| 1239 | + } | |
| 1240 | + System.arraycopy(pusername, 0, buffer, n, nlen); | |
| 1241 | + n += nlen; | |
| 1242 | + for (; nlen < Hunt.USERNAME_LEN; nlen++) { | |
| 1243 | + buffer[n++] = 0; | |
| 1244 | + } | |
| 1245 | + buffer[n++] = 0; | |
| 1246 | + if (session.send_packet_c(buffer, n) == false) { | |
| 1247 | + System.out.println(Hunt.getBundle(). | |
| 1248 | + getString("ERRMESG_SENDPACKET")); | |
| 1249 | + Hunt.abort(); | |
| 1250 | + } | |
| 1251 | + break; | |
| 1252 | + | |
| 1253 | + default: | |
| 1254 | + /* illegal command */ | |
| 1255 | + break; | |
| 1256 | + } | |
| 1257 | + } | |
| 1125 | 1258 | } |
| 1126 | 1259 | |
| 1127 | 1260 |
| @@ -86,6 +86,9 @@ | ||
| 86 | 86 | public static final byte HCLIT_LOGOFF = 0x3a; |
| 87 | 87 | public static final byte HCLIT_NEWUSER = 0x3b; |
| 88 | 88 | public static final byte HCLIT_DELUSER = 0x3c; |
| 89 | + public static final byte HCLIT_JAILUSER = 0x3d; | |
| 90 | + public static final byte HCLIT_ADMINCMD = 0x3e; | |
| 91 | + public static final byte HCLIT_SHUTDOWN = 0x3f; | |
| 89 | 92 | |
| 90 | 93 | /* map data */ |
| 91 | 94 | public static final byte HCLIT_MAP_INVALID = '?'; |
| @@ -638,7 +641,6 @@ | ||
| 638 | 641 | } |
| 639 | 642 | |
| 640 | 643 | /* make client */ |
| 641 | - | |
| 642 | 644 | static void make_client() { |
| 643 | 645 | Rectangle r; |
| 644 | 646 | mainWnd = new Frame(MessageFormat.format(Hunt.getBundle(). |