2017-04-01 07:37:48 +02:00
package net.ME1312.SubServers.Bungee.Network.Packet ;
2019-04-18 16:02:09 +02:00
import net.ME1312.Galaxi.Library.Map.ObjectMap ;
import net.ME1312.Galaxi.Library.Util ;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn ;
2020-11-16 21:34:59 +01:00
import net.ME1312.SubData.Server.Protocol.PacketObjectOut ;
import net.ME1312.SubData.Server.SubDataClient ;
import net.ME1312.SubServers.Bungee.Host.External.ExternalSubServer ;
import net.ME1312.SubServers.Bungee.Host.SubServer ;
2019-08-30 21:44:54 +02:00
import net.ME1312.SubServers.Bungee.SubProxy ;
2017-04-01 07:37:48 +02:00
import java.util.Arrays ;
/ * *
2021-07-09 07:46:10 +02:00
* Control External 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 > {
2019-08-30 21:44:54 +02:00
private SubProxy plugin ;
2017-04-01 07:37:48 +02:00
private SubServer server ;
2021-07-09 07:46:10 +02:00
private Action type ;
2017-04-01 07:37:48 +02:00
private Object [ ] args ;
2021-07-09 07:46:10 +02:00
public enum Action {
2017-04-01 07:37:48 +02:00
// Actions
START ( 1 , String . class ) ,
COMMAND ( 2 , String . class ) ,
STOP ( 3 ) ,
TERMINATE ( 4 ) ,
// Data Manipulation
SET_ENABLED ( 0 , Boolean . class ) ,
SET_LOGGING ( 5 , Boolean . class ) ,
2019-08-30 02:01:52 +02:00
SET_LOGGING_ADDRESS ( 6 , String . class ) ,
SET_STOP_COMMAND ( 7 , String . class ) ;
2017-04-01 07:37:48 +02:00
private short value ;
private Class < ? > [ ] args ;
2021-07-09 07:46:10 +02:00
Action ( 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 )
2017-04-01 07:37:48 +02:00
* @param plugin SubPlugin
* /
2021-07-09 07:46:10 +02:00
public PacketExControlServer ( SubProxy plugin ) {
2017-04-01 07:37:48 +02:00
this . plugin = plugin ;
}
/ * *
2021-07-09 07:46:10 +02:00
* New PacketExControlServer ( Out )
2017-04-01 07:37:48 +02:00
*
* @param server SubServer
* @param type Update Type
* @param arguments Arguments
* /
2021-07-09 07:46:10 +02:00
public PacketExControlServer ( SubServer server , Action 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-04-18 16:02:09 +02:00
public ObjectMap < Integer > send ( SubDataClient client ) {
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-04-18 16:02:09 +02:00
public void receive ( SubDataClient client , ObjectMap < Integer > data ) {
2017-04-01 07:37:48 +02:00
try {
2021-10-24 20:53:15 +02:00
ExternalSubServer server = ( ExternalSubServer ) plugin . api . getSubServer ( data . getString ( 0x0000 ) ) ;
2019-04-18 16:02:09 +02:00
switch ( data . getInt ( 0x0001 ) ) {
2017-04-01 07:37:48 +02:00
case 1 :
2019-01-15 00:28:18 +01:00
Util . reflect ( ExternalSubServer . class . getDeclaredMethod ( " falsestart " ) , server ) ;
2017-04-01 07:37:48 +02:00
break ;
case 2 :
2019-04-18 16:02:09 +02:00
Util . reflect ( ExternalSubServer . class . getDeclaredMethod ( " stopped " , Boolean . class ) , server , data . getList ( 0x0002 ) . get ( 1 ) . asBoolean ( ) ) ;
2017-04-01 07:37:48 +02:00
break ;
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
}
}