using CommonLang.IO.Attribute;
using CommonLang.Protocol;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CommonLang.IO;
using CommonAI.Zone;
namespace CommonTickBattle.Battle
{
public abstract class TBMessage : IMessage
{
public int MessageID { get; set; }
public abstract void WriteExternal(IOutputStream output);
public abstract void ReadExternal(IInputStream input);
}
///
/// Local->Host
/// 想在未来某个时间点执行一个动作
///
[MessageType(0xFB01)]
public class TBRequest : TBMessage
{
public ulong send_tick;
public ulong action_tick;
public CommonAI.Zone.Action action;
public override void WriteExternal(IOutputStream output)
{
output.PutVS32(MessageID);
output.PutVU64(send_tick);
output.PutVU64(action_tick);
output.PutExt(action);
}
public override void ReadExternal(IInputStream input)
{
this.MessageID = input.GetVS32();
this.send_tick = input.GetVU64();
this.action_tick = input.GetVU64();
this.action = input.GetExtAny() as ObjectAction;
}
}
///
/// Host->Local
/// 对Request做判断是否成功执行
///
[MessageType(0xFB02)]
public class TBResponse : TBMessage
{
public enum Result : byte
{
NA = 0,
OK = 1,
TimeOut = 2,
Error = 255,
}
public Result result;
public override void WriteExternal(IOutputStream output)
{
output.PutVS32(MessageID);
output.PutEnum8(result);
}
public override void ReadExternal(IInputStream input)
{
this.MessageID = input.GetVS32();
this.result = input.GetEnum8();
}
}
///
/// Host->Local
/// 成功的Request动作同步给其他玩家
///
[MessageType(0xFB03)]
public class TBNotify : TBMessage
{
public string player_uuid;
public ulong action_tick;
public CommonAI.Zone.Action action;
public override void WriteExternal(IOutputStream output)
{
output.PutUTF(player_uuid);
output.PutVU64(action_tick);
output.PutExt(action);
}
public override void ReadExternal(IInputStream input)
{
this.player_uuid = input.GetUTF();
this.action_tick = input.GetVU64();
this.action = input.GetExtAny() as ObjectAction;
}
}
///
/// Host->Local
/// 同步帧
///
[MessageType(0xFB04)]
public class TBSyncTime : TBMessage
{
public ulong current_tick;
public override void WriteExternal(IOutputStream output)
{
output.PutVU64(current_tick);
}
public override void ReadExternal(IInputStream input)
{
this.current_tick = input.GetVU64();
}
}
///
/// Host->Local
/// 同步历史记录,用于断线重连
///
[MessageType(0xFB05)]
public class TBSyncHistory : TBMessage
{
public ulong current_tick;
public List history;
public override void WriteExternal(IOutputStream output)
{
output.PutVU64(current_tick);
output.PutList(history, output.PutExt);
}
public override void ReadExternal(IInputStream input)
{
this.current_tick = input.GetVU64();
this.history = input.GetList(input.GetExt);
}
}
}