Files
hjha-server/base/event0.cs
xiaoou e9616125ce feat: initial commit - HJHA game server full source
6 major server modules (PdkFriendServer/GlobalSever/ServerCore/GameModule/GameNetModule) +
game logic (GameFix/GameDAL/ServerData) +
network layer (NetWorkMessage) +
data layer (ObjectModel) +
utilities (MrWu/Core/Config/CloudAPI/dll) +
adapters (zyxAdapter/base)

.NET 8.0 C# solution, 16 projects, 958 source files
2026-07-07 12:02:15 +08:00

294 lines
11 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 由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; }
/// <summary>
/// c# dll过程入口
/// </summary>
/// <param name="dowhat"></param>
/// <param name="datas"></param>
/// <param name="t"></param>
/// <returns></returns>
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/*^分割*/
/// <summary>
/// 吴龙剑麻将函数delphi dll调用
/// </summary>
/// <param name="dowhat"></param>
/// <param name="datas"></param>
/// <param name="t"></param>
/// <returns></returns>
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<ABlock>(int.Parse(dts[0]), ref ablockTmp, (int*)&ablockTmp);
ABlock ablockTmp1 = new ABlock();
cls_nativeCom.Instance.getDataOfStruct<ABlock>(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"; }
}
}