/* * 由SharpDevelop创建。 * 用户: Administrator * 日期: 2018-11-28 * 时间: 16:26 * * 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件 */ using System; using System.Runtime.InteropServices; using MrWu.Debug; namespace zyxAdapter { /// /// dephi 中介者 /// public sealed class DephiMediatorPattern : IMediatorPattern { /// /// 方法 /// private FunctionRecord funs; private IParasitismUtil parasitism_; public IParasitismUtil parasitism { get { return parasitism_; } set { if (parasitism_ == null) parasitism_ = value; } } public DephiMediatorPattern(IParasitismUtil parasitism) { this.parasitism_ = parasitism; } #region IHostUtil c# 调用 dephi 函数 [DllImport("hjhaServer.dll", EntryPoint = "Init")] static extern int Init_( [MarshalAs(UnmanagedType.LPStr)] string exepath, [MarshalAs(UnmanagedType.LPStr)] string exename, int gameid, ref FunctionRecord func); int IHostUtil.Init(string exepath, string exename, int gameid) { funs = new FunctionRecord(this); return Init_(exepath, exename, gameid, ref funs); } [DllImport("hjhaServer.dll", EntryPoint = "FreeDll")] static extern int FreeDll_(); void IHostUtil.FreeDll() { FreeDll_(); } [DllImport("hjhaServer.dll", EntryPoint = "CreateTing")] static extern void CreateTing_(int tingCnt, int defaultDeskCnt); void IHostUtil.CreateTing(int tingid, int defaultDeskCnt) { CreateTing_(tingid, defaultDeskCnt); } [DllImport("hjhaServer.dll", EntryPoint = "CreateDesk")] static extern void CreateDesk_(int tingid, int deskid); void IHostUtil.CreateDesk(int tingid, int deskid) { CreateDesk_(tingid, deskid); } [DllImport("hjhaServer.dll", EntryPoint = "DestroyDesk")] static extern void DestroyDesk_(int tingid, int deskid); void IHostUtil.DestroyDesk(int tingid, int deskid) { DestroyDesk_(tingid, deskid); } [DllImport("hjhaServer.dll", EntryPoint = "StartWar")] static extern void StartWar_(int tingid, int deskid); void IHostUtil.StartWar(int tingid, int deskid) { StartWar_(tingid, deskid); } [DllImport("hjhaServer.dll", EntryPoint = "Reconnect")] static extern void Reconnect_(int tingid, int deskid, int plid); void IHostUtil.Reconnect(int tingid, int deskid, int plid) { Reconnect_(tingid, deskid, plid); } [DllImport("hjhaServer.dll", EntryPoint = "Dopack")] static extern void Dopack_(int tingid, int deskid,int seat, IntPtr intPtr, int length); void IHostUtil.Dopack(int tingid, int deskid, int seat,IntPtr intPtr, int length) { Dopack_(tingid, deskid, seat,intPtr,length); } [DllImport("hjhaServer.dll", EntryPoint = "DoTimer")] static extern void DoTimer_(int tingid, int deskid, int terval); void IHostUtil.DoTimer(int tingid, int deskid, int interval) { DoTimer_(tingid, deskid, interval); } [DllImport("hjhaServer.dll", EntryPoint = "LoadMem")] static extern void LoadMem_(int tingid, int deskid, IntPtr ptr,int len,bool isOld); void IHostUtil.LoadMem(int tingid, int deskid, byte[] data,bool isOld) { IntPtr ptr = Marshal.AllocHGlobal(data.Length); try { Marshal.Copy(data, 0, ptr, data.Length); LoadMem_(tingid, deskid, ptr, data.Length, isOld); } catch (Exception e) { Debug.Error($"LoadMem 报错:{e.ToString()}"); }finally { Marshal.FreeHGlobal(ptr); } } [DllImport("hjhaServer.dll", EntryPoint = "csharpdozyxfun")] static extern int doZyxFun_(int tingid, int deskid, [MarshalAs(UnmanagedType.LPStr)]string what, [MarshalAs(UnmanagedType.LPStr)]string param ); /// /// 调用子游戏方法 /// /// /// /// /// int IHostUtil.doZyxFun(int tingid, int deskid, string what, string param) { return doZyxFun_(tingid, deskid, what, param); } [DllImport("hjhaServer.dll", EntryPoint = "DoTest")] static extern void DoTest_(int data, int len); void IHostUtil.DoTest(int data, int len) { DoTest_(data, len); } #endregion #region IParaistismUtil dephi调用函数 c# 宿主程序实现 int IParasitismUtil.Logs( [MarshalAs(UnmanagedType.LPStr)] string msg, int level) { return parasitism.Logs(msg, level); } int IParasitismUtil.GetPlayerInt(int tingid,int deskid,int seat, int lx) { try { return parasitism.GetPlayerInt(tingid,deskid,seat, lx); } catch (Exception e) { Debug.Error("GetPlayerInt is error:" + e.ToString()); throw e; } } [return: MarshalAs(UnmanagedType.LPStr)] string IParasitismUtil.GetPlayerStr(int tingid,int deskid,int seat, int lx) { try { return parasitism.GetPlayerStr(tingid,deskid, seat, lx); } catch (Exception e) { Debug.Error("GetPlayerStr is error:" + e.ToString()); throw e; } } int IParasitismUtil.GetDeskInt(int tingid, int deskid, int lx) { try { return parasitism.GetDeskInt(tingid, deskid, lx); } catch (Exception e) { Debug.Error("GetDeskInt is error:" + e.ToString()); throw e; } } [return: MarshalAs(UnmanagedType.LPStr)] string IParasitismUtil.GetDeskStr(int tingid, int deskid, int lx) { try { return parasitism.GetDeskStr(tingid, deskid, lx); } catch (Exception e) { Debug.Error("GetDeskStr is error:" + e.ToString()); throw e; } } [return: MarshalAs(UnmanagedType.LPStr)] string IParasitismUtil.GetTingStr(int tingid, int lx) { try { return parasitism.GetTingStr(tingid, lx); } catch (Exception e) { Debug.Error("GetTingStr is error:" + e.ToString()); throw e; } } int IParasitismUtil.GetTingInt(int tingid, int lx) { try { return parasitism.GetTingInt(tingid, lx); } catch (Exception e) { Debug.Error("GetTingInt is error:" + e.ToString()); throw e; } } int IParasitismUtil.GetRoomInt(int roomid, int lx) { try { return parasitism.GetRoomInt(roomid, lx); } catch (Exception e) { Debug.Error("GetRoomInt is error:" + e.ToString()); throw e; } } [return: MarshalAs(UnmanagedType.LPStr)] string IParasitismUtil.GetRoomStr(int roomid, int lx) { try { return parasitism.GetRoomStr(roomid, lx); } catch (Exception e) { Debug.Error("GetRoomStr is error:" + e.ToString()); throw e; } } int IParasitismUtil.GetSeatid(int deskid, int id, int seat) { try { return parasitism.GetSeatid(deskid, id, seat); } catch (Exception e) { Debug.Error("GetSeatid is error:" + e.ToString()); throw e; } } int IParasitismUtil.SetPlayer(int tingid,int deskid,int seat, int lx, int num, [MarshalAs(UnmanagedType.LPStr)] string str) { try { return parasitism.SetPlayer(tingid,deskid, seat, lx, num, str); } catch (Exception e) { Debug.Error("SetPlayer is error:" + e.ToString()); throw e; } } int IParasitismUtil.SendPack(int tingid, int deskid, int seat, IntPtr intPtr, int length) { try { return parasitism.SendPack(tingid, deskid, seat,intPtr, length); } catch (Exception e) { Debug.Error("SendPack is error:" + e.ToString()); throw e; } } int IParasitismUtil.WarOver(int tingid, int deskid) { try { return parasitism.WarOver(tingid, deskid); } catch (Exception e) { Debug.Error("WarOver is error:" + e.ToString()); throw e; } } int IParasitismUtil.GetGameInt( [MarshalAs(UnmanagedType.LPStr)] string lx) { try { return parasitism.GetGameInt(lx); } catch (Exception e) { Debug.Error("GetGameInt is error:" + e.ToString()); throw e; } } [return: MarshalAs(UnmanagedType.LPStr)] string IParasitismUtil.GetGameStr( [MarshalAs(UnmanagedType.LPStr)] string lx) { try { return parasitism.GetGameStr(lx); } catch (Exception e) { Debug.Error("GetGameStr is error:" + e.ToString()); throw e; } } int IParasitismUtil.IsKaiZhan(int tingid, int deskid) { try { return parasitism.IsKaiZhan(tingid, deskid); } catch (Exception e) { Debug.Error("IsKaiZhan is error:" + e.ToString()); throw e; } } int IParasitismUtil.SaveMem(int tingid, int deskid, IntPtr ptr,int len) { try { return parasitism.SaveMem(tingid, deskid, ptr,len); } catch (Exception e) { Debug.Error("SaveMem is error:" + e.ToString()); throw e; } } int IParasitismUtil.SaveHuiFang(int tingid, int deskid, int lx, string jsondata) { try { return parasitism.SaveHuiFang(tingid, deskid, lx, jsondata); } catch (Exception e) { Debug.Error("SaveHuiFang is error:" + e.ToString()); throw e; } } int IParasitismUtil.LoadHuiFang(int tingid, int deskid) { try { return parasitism.LoadHuiFang(tingid, deskid); } catch (Exception e) { Debug.Error("LoadHuiFang is error:" + e.ToString()); throw e; } } int IParasitismUtil.DoZyxFun(string dowhat, string param, ref tr_rltpchar rlt) { try { return parasitism.DoZyxFun(dowhat, param, ref rlt); } catch (Exception e) { Debug.Error("DoZyxFun is error:" + e.ToString()); throw e; } } /// /// 加载额外的台桌数据,子游戏自己保存的 /// /// /// /// string IParasitismUtil.Load_taidata(int tingid, int deskid) { try { return parasitism.Load_taidata(tingid, deskid); } catch (Exception e) { Debug.Error("Load_taidata is error:" + e.ToString()); throw e; } } /// /// 保存额外的台桌数据, /// /// /// /// /// int IParasitismUtil.Save_taidata(int tingid, int deskid, string base64data) { try { return parasitism.Save_taidata(tingid, deskid, base64data); } catch (Exception e) { Debug.Error("Save_taidata is error:" + e.ToString()); throw e; } } #endregion } }