character service singleton
Some checks reported errors
studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit
Some checks reported errors
studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit
This commit is contained in:
parent
b320bc3e06
commit
bc2ecadf64
@ -1705,6 +1705,7 @@ Move all character to database instead of macro data object
|
||||
Major work on CharacterService
|
||||
Move character utils classe to macro data
|
||||
Move CharacterService to service package
|
||||
Convert character service to singleton
|
||||
|
||||
|
||||
|
||||
|
||||
@ -85,6 +85,7 @@ import electrosphere.server.datacell.RealmManager;
|
||||
import electrosphere.server.db.DatabaseController;
|
||||
import electrosphere.server.entity.poseactor.PoseModel;
|
||||
import electrosphere.server.saves.Save;
|
||||
import electrosphere.server.service.CharacterService;
|
||||
import electrosphere.server.service.StructureScanningService;
|
||||
import electrosphere.server.simulation.MacroSimulation;
|
||||
import electrosphere.server.simulation.MicroSimulation;
|
||||
@ -387,11 +388,10 @@ public class Globals {
|
||||
public static ElementService elementService;
|
||||
public static int openInventoriesCount = 0;
|
||||
|
||||
//file service
|
||||
//services
|
||||
public static FileWatcherService fileWatcherService;
|
||||
|
||||
//structure scanning service
|
||||
public static StructureScanningService structureScanningService;
|
||||
public static CharacterService characterService;
|
||||
|
||||
//collision world data
|
||||
public static CollisionWorldData commonWorldData;
|
||||
@ -553,6 +553,7 @@ public class Globals {
|
||||
Globals.mainThreadSignalService = (MainThreadSignalService)serviceManager.registerService(new MainThreadSignalService());
|
||||
Globals.fileWatcherService = (FileWatcherService)serviceManager.registerService(new FileWatcherService());
|
||||
Globals.structureScanningService = (StructureScanningService)serviceManager.registerService(new StructureScanningService());
|
||||
Globals.characterService = (CharacterService)serviceManager.registerService(new CharacterService());
|
||||
serviceManager.instantiate();
|
||||
//
|
||||
//End service manager
|
||||
|
||||
@ -29,7 +29,6 @@ import electrosphere.server.datacell.ServerWorldData;
|
||||
import electrosphere.server.entity.serialization.ContentSerialization;
|
||||
import electrosphere.server.macro.character.Character;
|
||||
import electrosphere.server.macro.character.PlayerCharacterCreation;
|
||||
import electrosphere.server.service.CharacterService;
|
||||
import electrosphere.util.Utilities;
|
||||
|
||||
/**
|
||||
@ -47,7 +46,7 @@ public class CharacterProtocol implements ServerProtocolTemplate<CharacterMessag
|
||||
switch(message.getMessageSubtype()){
|
||||
case REQUESTCHARACTERLIST: {
|
||||
Gson gson = new Gson();
|
||||
List<CharacterDescriptionDTO>characters = CharacterService.getCharacters(connectionHandler.getPlayer().getDBID()).stream().map((Character chara) -> {
|
||||
List<CharacterDescriptionDTO>characters = Globals.characterService.getCharacters(connectionHandler.getPlayer().getDBID()).stream().map((Character chara) -> {
|
||||
CharacterDescriptionDTO dtoObj = new CharacterDescriptionDTO();
|
||||
dtoObj.setId(chara.getId() + "");
|
||||
dtoObj.setTemplate(chara.getCreatureTemplate());
|
||||
@ -70,7 +69,7 @@ public class CharacterProtocol implements ServerProtocolTemplate<CharacterMessag
|
||||
case REQUESTCREATECHARACTER: {
|
||||
CreatureTemplate template = Utilities.deserialize(message.getdata(), CreatureTemplate.class);
|
||||
if(template != null){
|
||||
Character charaData = CharacterService.createCharacter(template, connectionHandler.getPlayer().getDBID());
|
||||
Character charaData = Globals.characterService.createCharacter(template, connectionHandler.getPlayer().getDBID());
|
||||
charaData.setPos(Globals.realmManager.first().getSpawnPoint());
|
||||
connectionHandler.setCreatureTemplate(Utilities.deserialize(message.getdata(), CreatureTemplate.class));
|
||||
connectionHandler.setCharacterId(charaData.getId());
|
||||
|
||||
@ -13,7 +13,6 @@ import electrosphere.server.datacell.ServerDataCell;
|
||||
import electrosphere.server.entity.serialization.ContentSerialization;
|
||||
import electrosphere.server.macro.MacroData;
|
||||
import electrosphere.server.saves.SaveUtils;
|
||||
import electrosphere.server.service.CharacterService;
|
||||
import electrosphere.util.FileUtils;
|
||||
import electrosphere.util.math.HashUtils;
|
||||
import electrosphere.server.macro.character.Character;
|
||||
@ -106,7 +105,7 @@ public class ServerContentManager {
|
||||
//store all character entities in database
|
||||
for(Entity entity : entities){
|
||||
if(ServerCharacterData.hasServerCharacterDataTree(entity)){
|
||||
CharacterService.saveCharacter(entity);
|
||||
Globals.characterService.saveCharacter(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,7 +17,6 @@ import electrosphere.server.macro.spatial.MacroAreaObject;
|
||||
import electrosphere.server.macro.structure.Structure;
|
||||
import electrosphere.server.macro.symbolism.Symbol;
|
||||
import electrosphere.server.macro.town.Town;
|
||||
import electrosphere.server.service.CharacterService;
|
||||
import electrosphere.util.FileUtils;
|
||||
|
||||
import java.util.Random;
|
||||
@ -246,7 +245,7 @@ public class MacroData {
|
||||
LoggerInterface.loggerEngine.WARNING(race.getName());
|
||||
int numCharsOfRace = 0;
|
||||
//n*m complexity - yikes! - as long as we're not making a million chars at start this should be _ok_
|
||||
for(Character chara : CharacterService.getAllCharacters()){
|
||||
for(Character chara : Globals.characterService.getAllCharacters()){
|
||||
if(chara.containsKey(CharacterDataStrings.RACE)){
|
||||
if(Race.getRace(chara).equals(race)){
|
||||
numCharsOfRace++;
|
||||
@ -267,7 +266,7 @@ public class MacroData {
|
||||
*/
|
||||
public List<Character> getCharacters(Vector3i worldPos){
|
||||
List<Character> rVal = new LinkedList<Character>();
|
||||
for(Character character : CharacterService.getAllCharacters()){
|
||||
for(Character character : Globals.characterService.getAllCharacters()){
|
||||
if(ServerWorldData.convertRealToChunkSpace(character.getPos()).equals(worldPos.x, worldPos.y, worldPos.z)){
|
||||
rVal.add(character);
|
||||
}
|
||||
@ -291,7 +290,7 @@ public class MacroData {
|
||||
* @return The character if it exists, null otherwise
|
||||
*/
|
||||
public Character getCharacter(int id){
|
||||
for(Character character : CharacterService.getAllCharacters()){
|
||||
for(Character character : Globals.characterService.getAllCharacters()){
|
||||
if(character.getId() == id){
|
||||
return character;
|
||||
}
|
||||
|
||||
@ -2,13 +2,13 @@ package electrosphere.server.macro.character;
|
||||
|
||||
import org.joml.Vector3d;
|
||||
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.server.datacell.Realm;
|
||||
import electrosphere.server.macro.character.data.CharacterDataStrings;
|
||||
import electrosphere.server.macro.character.diety.Diety;
|
||||
import electrosphere.server.macro.race.Race;
|
||||
import electrosphere.server.macro.structure.Structure;
|
||||
import electrosphere.server.macro.town.Town;
|
||||
import electrosphere.server.service.CharacterService;
|
||||
|
||||
/**
|
||||
* Utility functions for dealing with characters
|
||||
@ -55,7 +55,7 @@ public class CharacterUtils {
|
||||
* @return The character
|
||||
*/
|
||||
public static Character spawnCharacter(Realm realm, Vector3d position){
|
||||
Character rVal = CharacterService.createCharacter(null, 0);
|
||||
Character rVal = Globals.characterService.createCharacter(null, 0);
|
||||
rVal.setPos(position);
|
||||
Race.setRace(rVal, Race.create("human", "human"));
|
||||
realm.getDataCellManager().evaluateMacroObject(rVal);
|
||||
|
||||
@ -15,7 +15,6 @@ import electrosphere.net.server.player.Player;
|
||||
import electrosphere.net.server.protocol.CharacterProtocol;
|
||||
import electrosphere.server.datacell.Realm;
|
||||
import electrosphere.server.datacell.ServerWorldData;
|
||||
import electrosphere.server.service.CharacterService;
|
||||
|
||||
/**
|
||||
* Deals with spawning player characters
|
||||
@ -32,7 +31,7 @@ public class PlayerCharacterCreation {
|
||||
|
||||
//
|
||||
//get template
|
||||
Character charaData = CharacterService.getCharacter(connectionHandler.getPlayer().getDBID(), connectionHandler.getCharacterId());
|
||||
Character charaData = Globals.characterService.getCharacter(connectionHandler.getPlayer().getDBID(), connectionHandler.getCharacterId());
|
||||
CreatureTemplate template = charaData.getCreatureTemplate();
|
||||
if(connectionHandler.getCharacterId() == CharacterProtocol.SPAWN_EXISTING_TEMPLATE){
|
||||
template = connectionHandler.getCurrentCreatureTemplate();
|
||||
@ -91,7 +90,7 @@ public class PlayerCharacterCreation {
|
||||
*/
|
||||
static void addPlayerServerBTrees(Entity entity, ServerConnectionHandler serverConnectionHandler){
|
||||
ServerPlayerViewDirTree.attachServerPlayerViewDirTree(entity);
|
||||
ServerCharacterData.attachServerCharacterData(entity, CharacterService.getCharacter(serverConnectionHandler.getPlayer().getDBID(), serverConnectionHandler.getCharacterId()));
|
||||
ServerCharacterData.attachServerCharacterData(entity, Globals.characterService.getCharacter(serverConnectionHandler.getPlayer().getDBID(), serverConnectionHandler.getCharacterId()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -101,7 +100,7 @@ public class PlayerCharacterCreation {
|
||||
* @return The spawn point for the player
|
||||
*/
|
||||
public static Vector3d solveSpawnPoint(Realm realm, ServerConnectionHandler connectionHandler){
|
||||
Vector3d spawnPoint = CharacterService.getCharacter(connectionHandler.getPlayer().getDBID(), connectionHandler.getCharacterId()).getPos();
|
||||
Vector3d spawnPoint = Globals.characterService.getCharacter(connectionHandler.getPlayer().getDBID(), connectionHandler.getCharacterId()).getPos();
|
||||
if(spawnPoint == null){
|
||||
spawnPoint = realm.getSpawnPoint();
|
||||
}
|
||||
|
||||
@ -9,6 +9,8 @@ import java.util.concurrent.locks.ReentrantLock;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.engine.signal.Signal.SignalType;
|
||||
import electrosphere.engine.signal.SignalServiceImpl;
|
||||
import electrosphere.entity.Entity;
|
||||
import electrosphere.entity.EntityUtils;
|
||||
import electrosphere.entity.state.server.ServerCharacterData;
|
||||
@ -23,24 +25,31 @@ import electrosphere.util.SerializationUtils;
|
||||
/**
|
||||
* Service for interacting with macro-level characters
|
||||
*/
|
||||
public class CharacterService {
|
||||
public class CharacterService extends SignalServiceImpl {
|
||||
|
||||
/**
|
||||
* Map that stores the characters currently loaded into memory
|
||||
*/
|
||||
static Map<Integer,Character> loadedCharacterMap = new HashMap<Integer,Character>();
|
||||
Map<Integer,Character> loadedCharacterMap = new HashMap<Integer,Character>();
|
||||
|
||||
/**
|
||||
* Lock for thread-safe-ing the service
|
||||
*/
|
||||
static ReentrantLock lock = new ReentrantLock();
|
||||
ReentrantLock lock = new ReentrantLock();
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public CharacterService(){
|
||||
super("CharacterService", new SignalType[]{});
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a character in the database
|
||||
* @param template The creature template for the character
|
||||
* @param playerId The player's id
|
||||
*/
|
||||
public static Character createCharacter(CreatureTemplate template, int playerId){
|
||||
public Character createCharacter(CreatureTemplate template, int playerId){
|
||||
lock.lock();
|
||||
Character toStore = new Character(template);
|
||||
DatabaseResult result = Globals.dbController.executePreparedQuery(
|
||||
@ -65,7 +74,7 @@ public class CharacterService {
|
||||
* @param characterId The character's id
|
||||
* @return The character if it exists, null otherwise
|
||||
*/
|
||||
public static Character getCharacter(int playerId, int characterId){
|
||||
public Character getCharacter(int playerId, int characterId){
|
||||
lock.lock();
|
||||
if(loadedCharacterMap.containsKey(characterId)){
|
||||
Character rVal = loadedCharacterMap.get(characterId);
|
||||
@ -93,7 +102,7 @@ public class CharacterService {
|
||||
* @param playerId The player's id
|
||||
* @return The list of characters that player has
|
||||
*/
|
||||
public static List<Character> getCharacters(int playerId){
|
||||
public List<Character> getCharacters(int playerId){
|
||||
lock.lock();
|
||||
DatabaseResult result = Globals.dbController.executePreparedQuery("SELECT id, dataVal FROM charaData WHERE playerId=?;",playerId);
|
||||
List<Character> rVal = new LinkedList<Character>();
|
||||
@ -119,7 +128,7 @@ public class CharacterService {
|
||||
* Saves a character from an entity
|
||||
* @param characterEntity The entity
|
||||
*/
|
||||
public static void saveCharacter(Entity characterEntity){
|
||||
public void saveCharacter(Entity characterEntity){
|
||||
lock.lock();
|
||||
if(!ServerCharacterData.hasServerCharacterDataTree(characterEntity)){
|
||||
throw new Error("Trying to save entity hat does not contain character data!");
|
||||
@ -145,7 +154,7 @@ public class CharacterService {
|
||||
* Gets all characters
|
||||
* @return The list of all characters
|
||||
*/
|
||||
public static List<Character> getAllCharacters(){
|
||||
public List<Character> getAllCharacters(){
|
||||
lock.lock();
|
||||
DatabaseResult result = Globals.dbController.executePreparedQuery("SELECT id, dataVal FROM charaData");
|
||||
List<Character> rVal = new LinkedList<Character>();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user