Add remote kicking support to the MS
This commit is contained in:
@@ -152,6 +152,7 @@ public class IoSession {
|
||||
* Handles the writing of all buffers in the queue.
|
||||
*/
|
||||
public void write() {
|
||||
|
||||
if (!key.isValid()) {
|
||||
disconnect();
|
||||
return;
|
||||
@@ -169,6 +170,7 @@ public class IoSession {
|
||||
writingQueue.remove(0);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
disconnect();
|
||||
} finally {
|
||||
writingLock.unlock();
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package ms.net.event;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Locale;
|
||||
|
||||
import ms.Management;
|
||||
import ms.net.IoReadEvent;
|
||||
import ms.net.IoSession;
|
||||
import ms.net.packet.IoBuffer;
|
||||
import ms.system.util.ManagementConstants;
|
||||
import ms.world.PlayerSession;
|
||||
import ms.world.WorldDatabase;
|
||||
import ms.system.util.ByteBufferUtils;
|
||||
|
||||
@@ -40,6 +44,35 @@ public final class HSReadEvent extends IoReadEvent {
|
||||
int updateStamp = buffer.getInt();
|
||||
WorldDatabase.sendUpdate(session, updateStamp);
|
||||
break;
|
||||
case 35:
|
||||
IoBuffer buf = new IoBuffer();
|
||||
String username = ByteBufferUtils.getString(buffer).toLowerCase();
|
||||
password = ByteBufferUtils.getString(buffer);
|
||||
if (!password.equals(ManagementConstants.getSECRET_KEY())){
|
||||
System.out.println("Password mismatch (attempt=" + password + ")!");
|
||||
buf.put(1);
|
||||
ByteBuffer buff = buf.toByteBuffer();
|
||||
buff.flip();
|
||||
session.queue(buff);
|
||||
return;
|
||||
}
|
||||
|
||||
PlayerSession player = WorldDatabase.getPlayer(username);
|
||||
if (player == null) {
|
||||
System.out.println("Player " + username + " was not registered!");
|
||||
buf.put(2);
|
||||
ByteBuffer buff = buf.toByteBuffer();
|
||||
buff.flip();
|
||||
session.queue(buff);
|
||||
return;
|
||||
}
|
||||
buf.put(0);
|
||||
ByteBuffer buff = buf.toByteBuffer();
|
||||
buff.flip();
|
||||
session.queue(buff);
|
||||
player.getWorld().getPlayers().remove(username);
|
||||
player.setWorldId(0);
|
||||
break;
|
||||
default:
|
||||
System.err.println("Unhandled handshake opcode: " + opcode + ".");
|
||||
session.disconnect();
|
||||
|
||||
Reference in New Issue
Block a user