/*
* 由SharpDevelop创建。
* 用户: Administrator
* 日期: 2018-03-12
* 时间: 16:24
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Forms;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.IO;
using zyxAdapter;
using MrWu.Debug;
namespace nativeCom {
public class dcEvent_zyx0 {
public virtual void init() {
log("zyxevent init...");
// dg_zyxfun dg=new dg_zyxfun( doMsg_fun);
}
public void log(string str, bool isError = false) {
if (isError)
MrWu.Debug.Debug.Error(str);
else
MrWu.Debug.Debug.Log(str);
}
public virtual myGameClassBase newobj(ref tr_rltpchar t) { return null; }
///
/// c# dll过程入口
///
///
///
///
///
unsafe public virtual int doMsg_rukou(string dowhat/*^分割*/, string datas/*结构体地址 ^分割*/, ref tr_rltpchar t) {
// Thread.Sleep(10000);
// return 1;
myGameClassBase mc = null;
string[] ss = datas.Split('*');//
//ss[0] myclass
switch (ss[1]) {
case "dotimer":
case "init_deskmem":
break;
default: log(dowhat + " " + datas); break;
}
bool initedmem = true;
switch (ss[1]) {
case "init_deskmem":
if (ss[2] == "0")
initedmem = false;
break;
}
if (initedmem)
mc = myGameObj.getObj(ss[0]) as myGameClassBase;
else {
mc = newobj(ref t);
}
Igamedo ido = mc as Igamedo;
if (ido != null) {
if (!initedmem)
ido.i_do_initMem(false);
switch (ss[1]) {
case "init_deskmem":
if (ss[2] == "1") {
ido.i_do_initMem(true);
mc.releaseAddr();//!!!!必须
} else {
}
// mc.do_initmem(true);
break;
case "startwar":
ido.i_do_startWar();
break;
case "reconnect"://ss[2] 谁id重连
ido.i_do_reconect();
break;
case "dopack":
int len = int.Parse(ss[3]);
byte[] data = new byte[len];
IntPtr ptr = new IntPtr(int.Parse(ss[2]));
Marshal.Copy(ptr, data, 0, len);
int evt;
object obj = cls_nativeCom.Instance.DeSerizeable_obj_withEvt(data, out evt);
ido.i_do_pack(obj, evt);
//test发包回去
//mc.sendpack(obj,84524);
data = null;
break;
case "dotimer":
ido.i_do_timer();
break;
case "doOthers":
switch (ss[2]) {
case "setdata_dapai":
len = int.Parse(ss[6]);
ptr = new IntPtr(int.Parse(ss[5]));
// data=new byte[len];
// Marshal.Copy(ptr,data,0,len);
// ido.i_getData(data);
//
// break;
string str = Marshal.PtrToStringAnsi(ptr);
ido.i_getData(str);
// IntPtr init = Marshal.StringToHGlobalAnsi(textBox1.Text);
//
//textBox2.Text = Marshal.PtrToStringAnsi(outit);
//
//Marshal.FreeHGlobal(outit);
break;
case "getdata_dapai":
ido.i_setData(ref t);
break;
}
break;
}
}
return 1;
}//返回string/*^分割*/
///
/// 吴龙剑麻将函数(delphi dll调用)
///
///
///
///
///
unsafe public int doMsg_fun(string dowhat/*^分割*/, string datas/*结构体地址 ^分割*/, ref tr_rltpchar t)//返回string/*^分割*/
{
switch (dowhat) {
case "Log":
MrWu.Debug.Debug.Log("exe log: " + datas, false);
break;
case "errorLog":
MrWu.Debug.Debug.Error("exe wrong: " + datas, true);
break;
case "zyxfun":
string[] ss = datas.Split('~');
t.str = "slkfj234";
t.str = doMsg(ss[0], ss[1]);
if (t.str == null || t.str == "" || t.str == " ")
log("wrong sdf", true);
break;
default:
log("wrong ...sdfsd", true);
break;
}
return 0;
}
unsafe public string doMsg_other(string dowhat/*^分割*/, string datas/*结构体地址 ^分割*/)//返回string/*^分割*/
{
string result = "";
string[] dts = null;
if (datas != null) dts = datas.Split('^');
string[] dostr = dowhat.Split('^');
string[] cmds = dostr[0].Split('*');
// if (cls_nativeCom.showlog && cmds[0]!="dotimer")
// log("domsg = "+dowhat+" "+datas);
switch (cmds[0]) {
case "changeText":
MrWu.Debug.Debug.Log("changeText:" + cmds[1]);
break;
case "terminate":
MrWu.Debug.Debug.Error("切换游戏状态");
// baseinfo.instance.exe.gamestate = 4;
//log("termainte self...");
// this.timer1.Enabled=true;
break;
case "serstate":
MrWu.Debug.Debug.Error("切换游戏状态:");
//baseinfo.instance.exe.gamestate = int.Parse(cmds[1]);
break;
case "showcsharpdllform":
MrWu.Debug.Debug.Log("显示dll窗口!");
/*
Form fmdll = baseinfo.instance.dll.fm;
if (fmdll == null) break;
if (cmds[1] == "1") {
fmdll.Show();
} else {
if (baseinfo.instance.exe.gamestate == 3) {
fmdll.Close();
} else {
if (baseinfo.instance.dll.fmsub != null)
baseinfo.instance.dll.fmsub.Hide();
fmdll.Hide();
}
}
*/
break;
case "yasuo":
ABlock ablockTmp = new ABlock();
cls_nativeCom.Instance.getDataOfStruct(int.Parse(dts[0]), ref ablockTmp, (int*)&ablockTmp);
ABlock ablockTmp1 = new ABlock();
cls_nativeCom.Instance.getDataOfStruct(int.Parse(dts[1]), ref ablockTmp1, (int*)&ablockTmp1);
// log("xxxx "+ablockTmp.len+" "+ablockTmp1.len);
if (cmds[1][0] == '1') result = cls_nativeCom.Instance.Compress(ref ablockTmp, ref ablockTmp1).ToString();
else
result = cls_nativeCom.Instance.deCompress(ref ablockTmp, ref ablockTmp1).ToString();
//log("xxxx xxx "+ablockTmp.len+" "+ablockTmp1.len);
break;
case "gameClose":
return "closeOk";//必须
case "dopack_ser"://收包
int regid_ = int.Parse(dostr[1]);
int blx_ = int.Parse(dostr[2]);//包类型--编号
int addr_mainpack = int.Parse(dts[0]);//包内容
break;
// case "dopack"://收包
//
// int blx=int.Parse(dostr[2]);//包类型--编号
// int dataAddr=int.Parse(dostr[3]);//数据地址
// int dataSize=int.Parse(dostr[4]);//数据大小
// int regid=int.Parse(dostr[5]);//谁发的包
// int addr_player=int.Parse(dostr[6]);//谁的地址
//
//
//
// switch (blx){//40000~99999给c#新启用
// case 50000://test
// string str1=myCom.Instance. getUnmanagedString(dataAddr,dataSize);
// log(blx+" "+str1);
// break;
// case 50001:
// stu_test st = new stu_test();
// myCom.Instance.getDataOfStruct(dataAddr, ref st,(int*)&st);
// log(blx+" "+st.b+"");
// break;
//// case 50002:
//// mytestCls1 cls=(mytestCls1)myCom.Instance.getDataOfClass(dataAddr,dataSize);
//// log(blx+" "+cls.b+"");
//// break;
//
// }
// break;
}
return result;
}
static int errorIdx;
unsafe public virtual string doMsg(string dowhat/*^分割*/, string datas/*结构体地址 ^分割*/)//返回string/*^分割*/
{ return "defautSTR"; }
}
}