2017-04-01 07:37:48 +02:00
package net.ME1312.SubServers.Host.Network.Packet ;
2019-05-13 05:28:27 +02:00
import net.ME1312.Galaxi.Library.Map.ObjectMap ;
2019-08-30 02:01:52 +02:00
import net.ME1312.Galaxi.Library.Util ;
2019-05-13 05:28:27 +02:00
import net.ME1312.SubData.Client.Protocol.PacketObjectIn ;
import net.ME1312.SubData.Client.Protocol.PacketObjectOut ;
2019-10-19 00:24:58 +02:00
import net.ME1312.SubData.Client.SubDataSender ;
2020-11-16 21:34:59 +01:00
import net.ME1312.SubServers.Host.ExHost ;
2019-08-30 21:44:54 +02:00
import net.ME1312.SubServers.Host.Executable.SubLoggerImpl ;
2019-08-30 02:01:52 +02:00
import net.ME1312.SubServers.Host.Executable.SubServerImpl ;
2017-04-01 07:37:48 +02:00
import java.util.Arrays ;
/ * *
2021-07-09 07:46:10 +02:00
* Control Server Packet
2017-04-01 07:37:48 +02:00
* /
2021-07-09 07:46:10 +02:00
public class PacketExControlServer implements PacketObjectIn < Integer > , PacketObjectOut < Integer > {
2017-04-16 19:02:14 +02:00
private ExHost host ;
2019-08-30 02:01:52 +02:00
private SubServerImpl server ;
2021-07-09 07:46:10 +02:00
private Response type ;
2017-04-01 07:37:48 +02:00
private Object [ ] args ;
2021-07-09 07:46:10 +02:00
public enum Response {
2017-04-01 07:37:48 +02:00
// Status
LAUNCH_EXCEPTION ( 1 ) ,
STOPPED ( 2 , Integer . class , Boolean . class ) ;
private short value ;
private Class < ? > [ ] args ;
2021-07-09 07:46:10 +02:00
Response ( int value , Class < ? > . . . args ) {
2017-04-01 07:37:48 +02:00
this . value = ( short ) value ;
this . args = args ;
}
public Class < ? > [ ] getArguments ( ) {
return args ;
}
public short getValue ( ) {
return value ;
}
}
/ * *
2021-07-09 07:46:10 +02:00
* New PacketExControlServer ( In )
2019-05-13 05:28:27 +02:00
* @param host ExHost
2017-04-01 07:37:48 +02:00
* /
2021-07-09 07:46:10 +02:00
public PacketExControlServer ( ExHost host ) {
2017-04-01 07:37:48 +02:00
this . host = host ;
}
/ * *
2021-07-09 07:46:10 +02:00
* New PacketExControlServer ( Out )
2017-04-01 07:37:48 +02:00
*
* @param type Update Type
* @param arguments Arguments
* /
2021-07-09 07:46:10 +02:00
public PacketExControlServer ( SubServerImpl server , Response type , Object . . . arguments ) {
if ( arguments . length < type . getArguments ( ) . length ) throw new IllegalArgumentException ( " Not enough arguments for type: " + type ) ;
2017-04-01 07:37:48 +02:00
this . server = server ;
this . type = type ;
2021-07-09 07:46:10 +02:00
this . args = new Object [ type . getArguments ( ) . length ] ;
for ( int i = 0 ; i < type . getArguments ( ) . length ; + + i ) {
2022-05-28 11:59:33 +02:00
if ( ! type . getArguments ( ) [ i ] . isInstance ( arguments [ i ] ) ) throw new IllegalArgumentException ( " Argument " + ( i + 1 ) + " is not " + type . getArguments ( ) [ i ] . getTypeName ( ) ) ;
2021-07-09 07:46:10 +02:00
args [ i ] = arguments [ i ] ;
}
2017-04-01 07:37:48 +02:00
}
@Override
2019-10-19 00:24:58 +02:00
public ObjectMap < Integer > send ( SubDataSender client ) {
2019-05-13 05:28:27 +02:00
ObjectMap < Integer > data = new ObjectMap < Integer > ( ) ;
data . set ( 0x0000 , server . getName ( ) ) ;
data . set ( 0x0001 , type . getValue ( ) ) ;
data . set ( 0x0002 , Arrays . asList ( args ) ) ;
2018-04-15 03:53:51 +02:00
return data ;
2017-04-01 07:37:48 +02:00
}
@Override
2019-10-19 00:24:58 +02:00
public void receive ( SubDataSender client , ObjectMap < Integer > data ) {
2017-04-01 07:37:48 +02:00
try {
2021-10-24 20:53:15 +02:00
SubServerImpl server = host . servers . get ( data . getString ( 0x0000 ) . toLowerCase ( ) ) ;
2019-05-13 05:28:27 +02:00
switch ( data . getInt ( 0x0001 ) ) {
2017-04-01 07:37:48 +02:00
case 0 :
2019-05-13 05:28:27 +02:00
server . setEnabled ( data . getList ( 0x0002 ) . get ( 0 ) . asBoolean ( ) ) ;
2017-04-01 07:37:48 +02:00
break ;
case 1 :
2019-05-13 05:28:27 +02:00
server . start ( data . getList ( 0x0002 ) . get ( 0 ) . asUUID ( ) ) ;
2017-04-01 07:37:48 +02:00
break ;
case 2 :
2021-10-24 20:53:15 +02:00
server . command ( data . getList ( 0x0002 ) . get ( 0 ) . asString ( ) ) ;
2017-04-01 07:37:48 +02:00
break ;
case 3 :
server . stop ( ) ;
break ;
case 4 :
server . terminate ( ) ;
break ;
case 5 :
2019-05-13 05:28:27 +02:00
server . setLogging ( data . getList ( 0x0002 ) . get ( 0 ) . asBoolean ( ) ) ;
2017-04-01 07:37:48 +02:00
break ;
case 6 :
2019-08-30 21:44:54 +02:00
Util . reflect ( SubLoggerImpl . class . getDeclaredField ( " address " ) , server . getLogger ( ) , data . getList ( 0x0002 ) . get ( 0 ) . asUUID ( ) ) ;
2019-08-30 02:01:52 +02:00
break ;
case 7 :
2021-10-24 20:53:15 +02:00
server . setStopCommand ( data . getList ( 0x0002 ) . get ( 0 ) . asString ( ) ) ;
2017-04-01 07:37:48 +02:00
break ;
}
} catch ( Exception e ) {
host . log . error . println ( e ) ;
}
}
}