Newer
Older
SproutServerMicro / src / main / java / org / ntlab / SproutServer / battles / Battles.java
s-bekki on 30 Nov 2017 2 KB initial commit
package org.ntlab.SproutServer.battles;

import net.arnx.jsonic.JSON;
import org.ntlab.SproutServer.accounts.Accounts;
import org.ntlab.SproutServer.rooms.Room;
import org.ntlab.SproutServer.rooms.Rooms;

import javax.inject.Singleton;
import javax.print.attribute.standard.Media;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;
import java.util.HashMap;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * バトルを管理するクラス
 *
 * @author matsumoto_k
 */
public class Battles implements Runnable {
    private static Battles theInstance = null; // シングルトンパターン
    private HashMap<Integer, Battle> battleMap = new HashMap<>(); // バトル一覧
    private int battleCount = 0; // バトルを識別するためのid
    private ScheduledThreadPoolExecutor schedule = null;

    @Context
    UriInfo uriInfo;

    private Battles() {
    	System.out.println("create battles singleton");
        schedule = new ScheduledThreadPoolExecutor(1);
        schedule.scheduleAtFixedRate(this, BattlesConst.UPDATE_DELAY, BattlesConst.UPDATE_INTERVAL, TimeUnit.MILLISECONDS);
    }

    public static Battles getInstance() {
        if (theInstance == null) {
            theInstance = new Battles();
        }
        return theInstance;
    }

    // バトル作成
    public int createBattle(Room room1, Room room2) {
        Battle battle = new Battle(room1, room2);
        battleMap.put(battleCount, battle);
        int resBattleCount = battleCount;
        battleCount++;
        return resBattleCount;
    }

    // ダミーバトル作成
    public void createDummyBattle(int battleId, Room room1, Room room2) {
        Battle battle = new Battle(room1, room2);
        if (battleMap.get(battleId) != null) {
            battleMap.remove(battleId);
        }
        battleMap.put(battleId, battle);
    }

    // バトル削除
    public void removeBattle(int battleId) {
        battleMap.remove(battleId);
    }

    public HashMap<Integer, Battle> getBattleMap() {
        return battleMap;
    }

    /**
     * プレイヤー情報の更新
     *
     * @param battleId   バトルID
     * @param roomId     ルームID
     * @param userId     ユーザーID
     * @param playerData 更新するプレイヤーの情報
     */
    public void updatePlayer(int battleId, int roomId, int userId, PlayerData playerData) {
        findBattleById(battleId).update(userId, roomId, playerData);
    }

    /**
     * Battlesのメインループ
     */
    @Override
    public void run() {
        for (Battle battle : battleMap.values()) {
            battle.update();
        }
    }

    /**
     * battleIdによってBattleを取得
     *
     * @param battleId 取得したいbattleのbattleId
     * @return Battle
     */
    public Battle findBattleById(int battleId) {
        return battleMap.get(battleId);
    }
}