Renderer/src/main/java/electrosphere/net/synchronization/server/ServerSynchronizationManager.java
austin 438766d052
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
moving files around
2024-08-10 18:00:53 -04:00

93 lines
3.0 KiB
Java

package electrosphere.net.synchronization.server;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import electrosphere.entity.Entity;
import electrosphere.entity.state.movement.jump.ServerJumpTree;
import electrosphere.net.parser.net.message.SynchronizationMessage;
import electrosphere.net.synchronization.enums.BehaviorTreeIdEnums;
import electrosphere.server.datacell.utils.EntityLookupUtils;
/**
* Server service to handle synchronization packets from client (principally, requesting to start btrees)
*/
public class ServerSynchronizationManager {
/**
* Signal to start the specified tree
*/
public static final int SERVER_SYNC_START = 0;
/**
* Signal to interrupt the specified tree
*/
public static final int SERVER_SYNC_INTERRUPT = 1;
//The list of messages to loop through
List<SynchronizationMessage> messages = new CopyOnWriteArrayList<SynchronizationMessage>();
/**
* Pushes a message into the queue to be processed
* @param message The message
*/
public void pushMessage(SynchronizationMessage message){
this.messages.add(message);
}
/**
* Processes all messages in the queue and then clears the queue
*/
public void processMessages(){
List<SynchronizationMessage> messagesToClear = new LinkedList<SynchronizationMessage>();
for(SynchronizationMessage message : messages){
//attempt to handle the message
messagesToClear.add(message);
switch(message.getMessageSubtype()){
case CLIENTREQUESTBTREEACTION: {
Entity entity = EntityLookupUtils.getEntityById(message.getentityId());
updateEntityState(entity,message.getbTreeId(),message);
} break;
case UPDATECLIENTSTATE:
case UPDATECLIENTDOUBLESTATE:
case UPDATECLIENTFLOATSTATE:
case UPDATECLIENTINTSTATE:
case UPDATECLIENTLONGSTATE:
case UPDATECLIENTSTRINGSTATE:
case ATTACHTREE:
case DETATCHTREE:
case LOADSCENE:
case SERVERNOTIFYBTREETRANSITION:
//silently ignore
break;
}
}
for(SynchronizationMessage message : messagesToClear){
messages.remove(message);
}
}
/**
* <p> Automatically generated </p>
* <p>
* Performs actions requested by the client
* </p>
* @param entity The entity
* @param bTreeId The id of the behavior tree
* @param message The raw synchronization message holding the update data
*/
private void updateEntityState(Entity entity, int bTreeId, SynchronizationMessage message){
switch(bTreeId){
case BehaviorTreeIdEnums.BTREE_CLIENTJUMPTREE_ID: {
ServerJumpTree tree = ServerJumpTree.getServerJumpTree(entity);
tree.start();
} break;
}
}
}