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); } } }