/*
 * 由SharpDevelop创建。
 * 用户： Administrator
 * 日期: 2018-10-08
 * 时间: 11:17
 * 
 * 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
 */
using System;
using Server.Pack;

namespace Server
{
    /// <summary>
    /// 游戏行为
    /// </summary>
    public interface IGameBehavior<T> : ITimerProcessor,IGameMessage<T>
    {

        /// <summary>
        /// 下一个处理者
        /// </summary>
        IGameBehavior<T> NextBehavior {
            get;
        }

        /// <summary>
        /// 是否开战
        /// </summary>
        bool isWar {
            get;
        }

        /// <summary>
        /// 开战
        /// </summary>
		void StartWar();

        /// <summary>
        /// 有玩家重新连接
        /// </summary>
        /// <param name="seat">哪个座位的玩家重连</param>
        void Reconnect(int seat);

        /// <summary>
        /// 游戏结束
        /// </summary>
        void WarOver();

        /// <summary>
        /// 加载桌子数据_用于恢复桌子
        /// </summary>
        /// <param name="data">桌子内存</param>
        void LoadMem(byte[] data,bool isOld);

        /// <summary>
        /// 有玩家离线
        /// </summary>
        /// <param name="seat">离线的座位</param>
        void OutLine(int seat);

        /// <summary>
        /// 有玩家退出
        /// </summary>
        /// <param name="seat">退出的座位</param>
        void Quit(int seat);

        /// <summary>
        /// 询问算法是否可以退出
        /// </summary>
        /// <param name="seat">要执行退出的座位</param>
        /// <returns></returns>
        bool CanQuit(int seat);

        /// <summary>
        /// 解散房间
        /// </summary>
        void DisBank(int style = -1);

        /// <summary>
        /// 加载桌子成功
        /// </summary>
        void LoadMemSuccess();
    }
}
