You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

90 lines
3.0 KiB

using System.Collections.Generic;
using Sog;
using LitJson;
using SimpleHttpServer;
using ProtoCSStruct;
using System.Reflection;
namespace Operation
{
[MenuMapping(refc = typeof(PlayerInfoOp))]
public class SelectCus
{
//收到回包时调用这个
public static void OnResMsg(uint id, JsonData jsondata, HttpResponse rsp, HttpRequest request, HttpQueryParams query, ref SSGmQueryUserRoletInfoRes res)
{
jsondata["code"] = 0;
jsondata["totalPayMoneyUSD"] = res.RoleData.PayData.TotalPayMoneyUSD;
rsp.IsWaitFor = false;
return;
}
private static void GetResData(Dictionary<string, object> man, FieldInfo[] fieldInfos, object res)
{
//dynamic obj =new ExpandoObject();
foreach (var Fd in fieldInfos)
{
if (Fd.Name.StartsWith("Repeated") || Fd.Name == "FixedElementField")
{
continue;
}
if (Fd.FieldType.IsArray)
{
continue;
}
//基础类型直接写入值
if (Fd.FieldType.IsPrimitive)
{
if (!man.ContainsKey(Fd.Name))
{
man.Add(Fd.Name, Fd.GetValue(res));
}
}
else
{
// ProtoCSStruct.RepeatedDBIDValue_32 +< Buffer > e__FixedBuffer.FixedElementField
var vla = res.GetType().GetField(Fd.Name).GetValue(res);
//字符类型获取字符写入
if (Fd.FieldType == typeof(FixedStructString32) || Fd.FieldType == typeof(FixedStructString16))
{
man.Add(Fd.Name, Fd.FieldType.GetMethod("GetString").Invoke(vla, null));
}
//自定义结构继续递归
else
{
var sss = new Dictionary<string, object>();
GetResData(sss, Fd.FieldType.GetFields(), vla);
man.Add(Fd.Name, sss);
}
}
}
}
[RequestMapping("关卡信息",PermissionCode.USER_ROLE,true)]
public static int OnSelectCusHttpReq(string httpApiCmd, JsonData jsonData, HttpResponse rsp, HttpRequest request, HttpQueryParams query, uint httpContextId)
{
TraceLog.Trace("SelectCus.OnSelectCusHttpReq Url{0},param count {1}, httpContextId {2}", request.Url, query.Count, httpContextId);
int uid = query.GetValue("uid").Toint32(0);
SSGmQueryUserRoleInfoReq req = new SSGmQueryUserRoleInfoReq();
req.Id = httpContextId;
req.Uid = (uint)uid;
req.AccountType = 0;
OperationServerUtils.SendToWorld((int)SSGameMsgID.GmQueryUserRoleReq, ref req, uid, 0, "");
rsp.IsWaitFor = true;
return 0;
}
}
}