⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamecontroller.java

📁 一套MMORPG手机网络游戏的服务端
💻 JAVA
字号:
/*
 * Created on 2005-4-20
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.swing.server.server.controller;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.swing.server.common.GameEvent;
import com.swing.server.common.Player;
import com.swing.server.common.Wrap;
import com.swing.server.server.GameServer;
import com.swing.server.cfg.Configure;

/**
 * @author vampire_a
 * 
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
public abstract class GameController extends Wrap {

    /** reference to the GameServer */
    protected GameServer gameServer;

    /** players keyed by playerId */
    public final Map playersByPlayerId = new HashMap();

    public final Map function = new HashMap();

    public static String gameCode;
    
    public static String SPLITTER_1;

    public static String SPLITTER_2;
    
    protected static GameController instance;
    
    public static GameController getGameController () {
        return instance;
    }

    /**
     * GameServer will call this init method immediately after construction. It
     * is final so that this initialization does not got overridden by
     * subclasses. Initialization for subclasses is done in the initController()
     * method below.
     */
    public final void init(GameServer s) {

        this.gameServer = s;

        // todo: get the preferred number of workers from the GameConfig
        //	int nw = gc.getInt("NUM_WORKERS", 5);

        // init the Wrap first

        initWrap(Integer.parseInt((String) Configure.getConfigure().getConfig(
                "Server").get("Default_Controller_Workers")));
        // now call the subclasses' init
        initController();
    }

    public Player getPlayerById(String id) {
        return (Player) playersByPlayerId.get(id);
    }

    /**
     * add a player to our lists
     */
    public void addPlayer(Player p) {
        playersByPlayerId.put(p.getPlayerId(), p);
    }

    /**
     * remove a player from our lists
     */
    public void removePlayer(Player p) {
        playersByPlayerId.remove(p.getPlayerId());
    }

    /**
     * utility method for sending events
     */
    public void sendEvent(GameEvent e, Player p) {
        e.setPlayerId(p.getPlayerId());
        gameServer.writeEvent(e);
    }

    /**
     * 发送广播实际上是把信息存储在用户的广播存储队列里,当Function处理完某个事件时,会生成新的事件,并
     * 对那些需要广播的事件进行广播
     */
    public synchronized void sendBroadcastEvent(GameEvent e,
            Collection players) {
        Iterator i = players.iterator();
        int j = 0;
        while (i.hasNext()) {
            Player p = (Player) i.next();
            // 插入到各个Player的广播队列里
            if (!(p.getPlayerId().equals(e.getPlayerId())))
            {
                for (Iterator iter = e.getResponse().iterator(); iter.hasNext();) {
                    p.sendMessage(iter.next());
                }
            }
        }
    }

    /**
     * GameController subclasses should implement initController in order to do
     * any initialization they require.
     */
    protected abstract void initController();

    /**
     * subclasses must implement to provide their GameName
     */
    public String getGameCode() {
        return gameCode;
    }

    /**
     * factory method for fetching Player objects kind:
     * 表示本Player的类型,用来区分使用HTTP连接和Socket连接的客户 0: HTTP用户 1: Socket用户
     */
    public abstract Player createPlayer(int kind);

    /**
     * factory method for fetching GameEvent objects
     */
    public abstract GameEvent createGameEvent(String gameCode);
    

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -