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
This commit is contained in:
2026-07-07 12:02:15 +08:00
commit e9616125ce
958 changed files with 158203 additions and 0 deletions

View File

@ -0,0 +1,68 @@
/*
* 作者:吴隆健
* 日期: 2019-04-23
* 时间: 10:09
*
*/
using System;
namespace Server.Data
{
/// <summary>
/// Description of BigWiner.
/// </summary>
public class BigWiner
{
/// <summary>
/// bigWinerid
/// </summary>
public int id;
/// <summary>
/// 用户userid
/// </summary>
public int userid;
/// <summary>
/// 竞技比赛id
/// </summary>
public int clubid;
/// <summary>
/// 房间号
/// </summary>
public int roomnum;
/// <summary>
/// 游戏服务器id
/// </summary>
public int gameserid;
/// <summary>
/// 玩法id
/// </summary>
public int wayid;
/// <summary>
/// 昵称
/// </summary>
public string nickname;
/// <summary>
/// 备注
/// </summary>
public string remark;
/// <summary>
/// 头像
/// </summary>
public string photo;
/// <summary>
/// 开始时间
/// </summary>
public DateTime startTime;
/// <summary>
/// 结束时间
/// </summary>
public DateTime endTime;
public override string ToString()
{
return string.Format("[BigWiner Id={0}, Userid={1}, Clubid={2}, Roomnum={3}, Gameserid={4}, Wayid={5}, Nickname={6}, Remark={7}, Photo={8}, StartTime={9}, EndTime={10}]", id, userid, clubid, roomnum, gameserid, wayid, nickname, remark, photo, startTime, endTime);
}
}
}

View File

@ -0,0 +1,20 @@

namespace Server.Pack
{
/// <summary>
/// 检查加入竞技比赛的结果
/// </summary>
public class CheckJoinClubResult
{
/// <summary>
/// 是否可以加入
/// </summary>
public bool result;
/// <summary>
/// 如果不能加入,错误的提示
/// </summary>
public string errinfo;
}
}

View File

@ -0,0 +1,135 @@
/*
* 由SharpDevelop创建。
* 用户: Administrator
* 日期: 2019-03-29
* 时间: 10:56
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
using System.Runtime.InteropServices;
using GameData.Club;
namespace Server.Data.ClubDef
{
/// <summary>
/// 竞技比赛的所有玩家id结构体
/// </summary>
[StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Ansi/*,Pack=1*/)]
public struct tr_clubMans{
/// <summary>
/// 玩家所有id
/// </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=ConstData.maxMemNum)]
public int[] ids;
public static tr_clubMans CreateClubMans(){
return new tr_clubMans(){
ids = new int[ConstData.maxMemNum]
};
}
}
/// <summary>
/// 时间结构
/// </summary>
[StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Ansi/*,Pack=1*/)]
public struct tr_sifangdatetime{
/// <summary>
/// 年-小时
/// </summary>
public int hours;
/// <summary>
/// 分钟
/// </summary>
public byte minute;
/// <summary>
/// 秒钟
/// </summary>
public byte second;
}
/// <summary>
/// 竞技比赛玩家信息
/// </summary>
[StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Ansi/*,Pack=1*/)]
public struct tr_playerInfoOfClub{
/// <summary>
/// 竞技比赛id
/// </summary>
public int clubid;
/// <summary>
/// 入会时间
/// </summary>
public tr_sifangdatetime jointime;
/// <summary>
/// 职位 0会长 1备用 2管理 5成员
/// </summary>
public byte position;
/// <summary>
/// 是否允许加入游戏
/// </summary>
public byte ingame;
public ushort bak1;
/// <summary>
/// 备注
/// </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=40)]
public byte[] remark;
public static tr_playerInfoOfClub CreateTr_playerInfoOfClub(){
return new tr_playerInfoOfClub(){
remark = new byte[40]
};
}
}
/// <summary>
/// 玩家的一堆竞技比赛信息
/// </summary>
public struct tr_clubsOfPlayer{
/// <summary>
/// 有效数量
/// </summary>
public int cnt;
/// <summary>
/// 竞技比赛数据
/// </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=ConstData.maxClubNumCnt)]
public tr_playerInfoOfClub[] datas;
public static tr_clubsOfPlayer CreateTr_clubsOfPlayer(){
return new tr_clubsOfPlayer(){
datas = new tr_playerInfoOfClub[ConstData.maxClubNumCnt]
};
}
}
/// <summary>
/// 玩家的战斗数据
/// </summary>
public struct tr_playerFightRecordId{
/// <summary>
/// 有效数量
/// </summary>
public int cnt;
/// <summary>
/// 战斗记录id
/// </summary>
[MarshalAs(UnmanagedType.ByValArray,SizeConst=ConstData.maxPlayerFightRecordCount)]
public int[] fightrecords;
}
}

View File

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Server.Data.ClubDef
{
/// <summary>
/// 竞技比赛玩法玩家数据
/// </summary>
public class ClubWayPlayer
{
/// <summary>
/// 竞技比赛id
/// </summary>
public int clubid;
/// <summary>
/// 玩法id
/// </summary>
public string wayid;
/// <summary>
/// 桌子的唯一码
/// </summary>
public string weiyima;
/// <summary>
/// 玩家数量
/// </summary>
public int playerCnt;
}
}

View File

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
namespace Server.Data {
/// <summary>
/// 玩法的桌子发生变化
/// </summary>
public class WayDeskChange {
/// <summary>
/// 竞技比赛id
/// </summary>
public int clubid;
/// <summary>
/// 玩法id
/// </summary>
public string wayid;
/// <summary>
/// 桌子唯一码
/// </summary>
public string deskweiyima;
/// <summary>
/// 类型0新增 1删除 2更新
/// </summary>
public int style;
}
}

View File

@ -0,0 +1,37 @@
/********************************
*
* 作者:吴隆健
* 创建时间: 2019/6/27 10:42:45
*
********************************/
using System;
namespace Server.Data {
/// <summary>
/// 发送错误的标签
/// </summary>
public static class FailTags {
/// <summary>
/// 如果包裹发送失败,发包提示玩家网络故障
/// </summary>
public const string net_error = "net_error";
/// <summary>
/// 提示玩家网络故障,并断开网络连接
/// </summary>
public const string net_error_netRe = "net_error_netRe";
/// <summary>
/// 配置发送失败
/// </summary>
public const string ConfigSendFail = "ConfigSendFail";
/// <summary>
/// 消息处理失败,重发消息,一定要处理的消息
/// </summary>
public const string ReSend = "ReSend";
}
}

View File

@ -0,0 +1,78 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Server.Data;
using GameData;
namespace Server {
public class GameServerInfo {
/// <summary>
/// 节点
/// </summary>
public ServerNode node;
/// <summary>
/// 游戏名称
/// </summary>
public string gamename;
/// <summary>
/// 赢的金额
/// </summary>
public long winmoney;
/// <summary>
/// 税收
/// </summary>
public long taxmoney;
/// <summary>
/// 玩家数量
/// </summary>
public int playerCount;
/// <summary>
/// 开启时间
/// </summary>
public DateTime startTime;
/// <summary>
/// 开战次数
/// </summary>
public int warCnt;
/// <summary>
/// 登录人次
/// </summary>
public long loginCnt;
/// <summary>
/// 消耗的房卡数
/// </summary>
public long cardCnt;
/// <summary>
/// 桌子数量
/// </summary>
public int DeskCnt;
/// <summary>
/// 房间信息
/// </summary>
public RoomInfo[] rooms;
/// <summary>
/// 房间信息
/// </summary>
public class RoomInfo {
/// <summary>
/// 玩家数量
/// </summary>
public int PlayerCnt;
/// <summary>
/// 税收
/// </summary>
public long taxMoney;
/// <summary>
/// 赢的钱
/// </summary>
public long winmMoney;
}
}
}

View File

@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Server.Data {
/// <summary>
/// 远程节点信息
/// </summary>
public class RemoteNodeInfo {
/// <summary>
/// 模块类型ID
/// </summary>
public int moduleId {
get; set;
}
/// <summary>
/// 模块节点ID
/// </summary>
public int nodenum {
get; set;
}
/// <summary>
/// 模块本地磁盘路径
/// </summary>
public string path {
get; set;
}
public override string ToString() {
return $"模块ID:{moduleId}, 节点ID:{nodenum}, 远程文件路径:{path}";
;
}
/// <summary>
/// Clone
/// </summary>
/// <returns>RemoteNodeInfo</returns>
public RemoteNodeInfo Clone() {
return new RemoteNodeInfo { moduleId = moduleId, nodenum = nodenum, path = path };
}
}
/// <summary>
/// 服务器指令
/// </summary>
public class ServerCmd {
/// <summary>
/// 命令
/// </summary>
public string cmd;
/// <summary>
/// 参数
/// </summary>
public RemoteNodeInfo parameter;
}
}

View File

@ -0,0 +1,10 @@
using System;
namespace ServerData.Data
{
public class TimeBaseData<T>
{
public T Data;
public DateTime Time;
}
}

View File

@ -0,0 +1,495 @@
/*
* 由SharpDevelop创建。
* 用户: Administrator
* 日期: 2018-09-17
* 时间: 14:51
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
namespace Server.Data.Module
{
/// <summary>
/// 模块类型
/// </summary>
public enum ModuleType : byte
{
/// <summary>
/// 客户端
/// </summary>
Client = 0,
/// <summary>
/// 测试单单元
/// </summary>
TestModule = 2,
/// <summary>
/// 路由
/// </summary>
SocketModule = 3,
/// <summary>
/// http协议
/// </summary>
HttpModule = 4,
/// <summary>
/// 登录注册等服务
/// </summary>
LoginModule = 5,
/// <summary>
/// 配置模块
/// </summary>
ConfigModule = 6,
/// <summary>
/// 竞技比赛模块
/// </summary>
ClubModule = 7,
/// <summary>
/// GameWeb 服务
/// </summary>
GameWeb = 8,
/// <summary>
/// 任务模块
/// </summary>
TaskModule = 9,
/// <summary>
/// 服务器管理模块
/// </summary>
ServerManager = 10,
/// <summary>
/// 三人二七王
/// </summary>
GameSeverTest = 11,
/// <summary>
/// 牛牛服务器
/// </summary>
NiuNiu = 12,
/// <summary>
/// 四人二七王带34
/// </summary>
EQW34 = 13,
/// <summary>
/// 四人二七王无34
/// </summary>
EQWno34 = 14,
/// <summary>
/// 南昌四团
/// </summary>
Ncst = 15,
/// <summary>
/// 南昌过炸
/// </summary>
Ncgz = 16,
/// <summary>
/// 二人关牌
/// </summary>
Ergp = 17,
/// <summary>
/// 跑得快
/// </summary>
Pdk = 18,
/// <summary>
/// 窝龙
/// </summary>
Wolong = 19,
/// <summary>
/// 服务器管理
/// </summary>
ManagerModule = 20,
/// <summary>
/// 数据中心
/// </summary>
DataCenter = 21,
/// <summary>
/// 南昌麻将
/// </summary>
NCMJModule = 22,
/// <summary>
/// 吉安麻将
/// </summary>
JAMJModule = 23,
/// <summary>
/// 赣州麻将
/// </summary>
GZMJModule = 24,
/// <summary>
/// 新余麻将
/// </summary>
XYMJModule = 25,
/// <summary>
/// 抚州麻将
/// </summary>
FZMJModule = 26,
/// <summary>
/// 萍乡麻将
/// </summary>
PXMJModule = 27,
/// <summary>
/// 斗地主_朋友房服务器
/// </summary>
DdzModule = 28,
/// <summary>
/// 游戏案例
/// </summary>
DomeModule = 29,
/// <summary>
/// 斗地主_金币场服务器
/// </summary>
DdzServer = 30,
/// <summary>
/// 看门狗
/// </summary>
WatchDog = 31,
/// <summary>
/// 比赛服务器
/// </summary>
BiSaiServer = 32,
/// <summary>
/// webSocket
/// </summary>
WebSocketModule = 33,
/// <summary>
/// 日志收集管理器
/// </summary>
LoggingCollect = 34,
/// <summary>
/// 捕鱼游戏 没用了
/// </summary>
FishGame = 35,
/// <summary>
/// 游戏中心服务器
/// </summary>
GameCenter = 36,
/// <summary>
/// 潮汕叫友 没用了
/// </summary>
StjyModule = 37,
/// <summary>
/// 3人二七王电视比赛抢位置服务器
/// </summary>
Eqw3Ren_Server_BiSai = 38,
/// <summary>
/// 掼蛋
/// </summary>
GuanDan = 39,
/// <summary>
/// 管理后台
/// </summary>
Management_Backend = 40,
/// <summary>
/// 上饶打炸
/// </summary>
ShangRaoDaZha = 41,
/// <summary>
/// 跑得快朋友房
/// </summary>
PdkFriend = 42,
/// <summary>
/// 上饶麻将
/// </summary>
ShangRaoMahjong = 43,
/// <summary>
/// 战队服务器
/// </summary>
TeamModule = 44,
/// <summary>
/// 都昌讨赏
/// </summary>
DuChangTaoShang = 45,
/// <summary>
/// 都昌栽宝
/// </summary>
DuChangZaiBao = 46,
/// <summary>
/// 都昌麻将
/// </summary>
DuChangMahjong = 47,
/// <summary>
/// 瑞昌麻将
/// </summary>
RuiChangMahjong = 48,
/// <summary>
/// 星子麻将
/// </summary>
XingZiMahjong = 49,
/// <summary>
/// 九江红中麻将
/// </summary>
JiuJiangHongZhongMahjong = 50,
/// <summary>
/// 九江炸弹
/// </summary>
JiuJiangBomb = 51,
/// <summary>
/// 德安麻将
/// </summary>
DeAnMahjong = 52,
/// <summary>
/// 遂川麻将
/// </summary>
SuiChuanMahjong = 53,
/// <summary>
/// 峡江麻将
/// </summary>
XiaJiangMahjong = 54,
/// <summary>
/// 泰和过炸
/// </summary>
TaiHeGuoZha = 55,
/// <summary>
/// 吉安麻将朋友
/// </summary>
JiAnMahjong = 56,
/// <summary>
/// 乐平讨赏
/// </summary>
LePingTaoShang = 57,
/// <summary>
/// 乐平麻将
/// </summary>
LePingMahjong = 58,
/// <summary>
/// 乐平包王
/// </summary>
LePingBaoWang = 59,
/// <summary>
/// 南昌麻将朋友房
/// </summary>
NanChangMahjong = 60,
/// <summary>
/// 余干六副
/// </summary>
YuGanLiuFu = 61,
/// <summary>
/// 余干510K
/// </summary>
YuGan510K = 62,
/// <summary>
/// 乐平六副
/// </summary>
LePingLiuFu=63,
/// <summary>
/// 乐平打炸
/// </summary>
LePingDaZha = 64,
/// <summary>
/// 余干夹子
/// </summary>
YuGanJiaZi = 65,
/// <summary>
/// 余干麻将
/// </summary>
YuGanMahjong = 66,
/// <summary>
/// 吉安王炸
/// </summary>
JiAnWangZha = 67,
/// <summary>
/// 泰和麻将
/// </summary>
TaiHeMahjong = 68,
/// <summary>
/// 万安麻将
/// </summary>
WanAnMahjong = 69,
/// <summary>
/// 永新麻将
/// </summary>
YongYinMahjong = 70,
/// <summary>
/// 吉水麻将
/// </summary>
JiShuiMahjong = 71,
/// <summary>
/// 遂川摇奖
/// </summary>
SuiChuanYaoJiang = 72,
/// <summary>
/// 新干麻将
/// </summary>
XinGanMahjong = 73,
/// <summary>
/// 武宁麻将
/// </summary>
WuNingMahjong = 74,
/// <summary>
/// 武宁27王
/// </summary>
WuNing27W = 75,
/// <summary>
/// 武宁双扣
/// </summary>
WuNingSQ = 76,
/// <summary>
/// 新27王
/// </summary>
Eqw = 77,
/// <summary>
/// 十三水
/// </summary>
ShiSanShui = 78,
/// <summary>
/// 定南麻将
/// </summary>
DingNanMahjong = 79,
/// <summary>
/// 双扣
/// </summary>
ShuangKou = 80,
/// <summary>
/// 杭州麻将
/// </summary>
HangZhouMahjong = 81,
/// <summary>
/// 十三水朋友房
/// </summary>
ShiSanShuiFriendRoom = 82,
/// <summary>
/// 鹰潭麻将
/// </summary>
YingTanMahjong = 83,
/// <summary>
/// 贵溪麻将
/// </summary>
GuiXiMahjong = 84,
/// <summary>
/// 余江麻将
/// </summary>
YuJiangMahjong = 85,
/// <summary>
/// 新窝龙
/// </summary>
WolongNew = 86,
/// <summary>
/// 乐安打盾
/// </summary>
LeAnDaDun = 87,
/// <summary>
/// 南城翻墩
/// </summary>
NanChengFanDun = 88,
/// <summary>
/// 云山五十K
/// </summary>
YunShan510K = 89,
/// <summary>
/// 抚州麻将
/// </summary>
FuZhouMahjong = 90,
/// <summary>
/// 南城麻将
/// </summary>
NanChengMahjong = 91,
/// <summary>
/// 上顿渡麻将
/// </summary>
ShangDunDuMahjong = 92,
/// <summary>
/// 黎川麻将
/// </summary>
LiChuanMahjong = 93,
/// <summary>
/// 崇仁麻将
/// </summary>
ChongRenMahjong = 94,
/// <summary>
/// 乐安麻将
/// </summary>
LeAnMahjong = 95,
}
}

View File

@ -0,0 +1,31 @@
#region Using directives
using System;
using System.Reflection;
using System.Runtime.InteropServices;
#endregion
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ServerData")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ServerData")]
[assembly: AssemblyCopyright("Copyright 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all the values or you can use the default the Revision and
// Build Numbers by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0")]

View File

@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ServerData {
/// <summary>
/// 服务器管理面板消息ID
/// </summary>
public static class ServerDashboardPackAgreement {
/// <summary>
/// 向服务器获取RSA公钥
/// </summary>
public const int Hello = 50100;
/// <summary>
/// 服务器管理面板登录
/// </summary>
public const int Login = 50110;
/// <summary>
/// 服务器管理面板注销
/// </summary>
public const int Logout = 50120;
/// <summary>
/// 游戏服务当前概况
/// </summary>
public const int State = 50200;
/// <summary>
/// 服务主机状态
/// </summary>
public const int Host = 60250;
/// <summary>
/// 当前服务节点状态
/// </summary>
public const int GameServerNode = 60300;
/// <summary>
/// 获取反馈数据
/// </summary>
public const int GetFeedBackData = 60985;
/// <summary>
/// 搜索玩家金币变化历史
/// </summary>
public const int SearchPlayerGoldHistore = 60990;
/// <summary>
/// 搜索玩家以获取详细信息
/// </summary>
public const int SearchPlayerDetail = 60995;
/// <summary>
/// 修改玩家代理身份
/// </summary>
public const int ModifyDaili = 60996;
/// <summary>
/// 当前在线玩家状态
/// </summary>
public const int PlayersOnLineQuery = 61000;
/// <summary>
/// 充值查询
/// </summary>
public const int PayQuery = 60100;
/// <summary>
/// 玩家金币查询
/// </summary>
public const int PlayerMoneyQuery = 60200;
/// <summary>
/// 实物卡充值查询
/// </summary>
public const int CardPayQuery = 60102;
/// <summary>
/// 发送邮件
/// </summary>
public const int SendMail = 60103;
/// <summary>
/// PushMessage 废弃
/// </summary>
public const int PushMessage = 60104;
}
}

View File

@ -0,0 +1,49 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<OutputType>Library</OutputType>
<RootNamespace>ServerData</RootNamespace>
<AssemblyName>ServerData</AssemblyName>
<LangVersion>8.0</LangVersion>
<Platforms>AnyCPU</Platforms>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<OutputPath>bin\Debug\</OutputPath>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>bin\Release\</OutputPath>
<DebugSymbols>false</DebugSymbols>
<DebugType>none</DebugType>
<Optimize>false</Optimize>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" />
</ItemGroup>
<ItemGroup>
<Reference Include="StackExchange.Redis">
<HintPath>..\dll\StackExchange.Redis.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MrWu\MrWu.csproj" />
<ProjectReference Include="..\NetWorkMessage\NetWorkMessage.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
namespace ServerData.Team
{
/// <summary>
/// 结束一桌的游戏的包
/// </summary>
public class SettleDeskPack
{
public int DeskId;
public List<UserSingleLiveness> Liveness;
public List<UserSingleContribution> Contributions;
}
/// <summary>
/// 用户单个活跃度信息
/// </summary>
public class UserSingleLiveness
{
public int UserId;
public int GameId;
public int Liveness;
}
/// <summary>
/// 用户单个贡献度信息
/// </summary>
public class UserSingleContribution
{
public int UserId;
public int GameId;
public float Contributions;
}
}