Implement get_pdata

This commit is contained in:
BtbN 2019-06-01 17:18:06 +02:00
parent 803ca8e02a
commit 6a8dc3f96b
7 changed files with 444 additions and 54 deletions

View File

@ -16,19 +16,21 @@ namespace ClanServer.Controllers.Core
[HttpPost, XrpcCall("cardmng.inquire")]
public ActionResult<EamuseXrpcData> Inquire([FromBody] EamuseXrpcData data)
{
string cardid = data.Document.Element("call").Element("cardmng").Attribute("cardid").Value;
string cardType = data.Document.Element("call").Element("cardmng").Attribute("cardtype").Value;
string update = data.Document.Element("call").Element("cardmng").Attribute("update").Value;
XElement cardmng = data.Document.Element("call").Element("cardmng");
string cardid = cardmng.Attribute("cardid").Value;
string cardType = cardmng.Attribute("cardtype").Value;
string update = cardmng.Attribute("update").Value;
if (update != "") // TODO: actually register cards
{
data.Document = new XDocument(new XElement("response", new XElement("cardmng",
new XAttribute("binded", "1"),
new XAttribute("dataid", "DD389C3FFB6F47BA"),
new XAttribute("refid", "DD389C3FFB6F47BA"),
new XAttribute("ecflag", "1"),
new XAttribute("newflag", "0"),
new XAttribute("expired", "0")
new XAttribute("expired", "0"),
new XAttribute("refid", "DD389C3FFB6F47BA")
)));
}
else
@ -44,11 +46,35 @@ namespace ClanServer.Controllers.Core
[HttpPost, XrpcCall("cardmng.authpass")]
public ActionResult<EamuseXrpcData> Authpass([FromBody] EamuseXrpcData data)
{
XElement cardmng = data.Document.Element("call").Element("cardmng");
string pass = cardmng.Attribute("pass").Value;
string refId = cardmng.Attribute("refid").Value;
//TODO
data.Document = new XDocument(new XElement("response", new XElement("cardmng",
new XAttribute("status", "0")
)));
return data;
}
[HttpPost, XrpcCall("cardmng.getrefid")]
public ActionResult<EamuseXrpcData> GetRefId([FromBody] EamuseXrpcData data)
{
XElement cardmng = data.Document.Element("call").Element("cardmng");
//TODO: register new user
Console.WriteLine(data.Document);
data.Document = new XDocument(new XElement("response", new XElement("cardmng",
new XAttribute("dataid", "DD389C3FFB6F47BA"),
new XAttribute("refid", "DD389C3FFB6F47BA")
)));
return data;
}
}
}

View File

@ -9,7 +9,7 @@ using eAmuseCore.KBinXML;
using ClanServer.Routing;
namespace ClanServer.Controllers.Core
namespace ClanServer.Controllers.L44
{
[ApiController, Route("L44")]
public class DemodataController : ControllerBase
@ -34,6 +34,14 @@ namespace ClanServer.Controllers.Core
return data;
}
[HttpPost, Route("8"), XrpcCall("demodata.get_hitchart")]
public ActionResult<EamuseXrpcData> GetHitchart([FromBody] EamuseXrpcData data)
{
data.Document = new XDocument(new XElement("response", new XElement("demodata")));
return data;
}
[HttpPost, Route("8"), XrpcCall("demodata.get_jbox_list")]
public ActionResult<EamuseXrpcData> GetJboxList([FromBody] EamuseXrpcData data)
{

View File

@ -0,0 +1,338 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;
using Microsoft.AspNetCore.Mvc;
using eAmuseCore.KBinXML;
using ClanServer.Routing;
namespace ClanServer.Controllers.L44
{
[ApiController, Route("L44")]
public class GametopController : ControllerBase
{
[HttpPost, Route("8"), XrpcCall("gametop.regist")]
public ActionResult<EamuseXrpcData> Register([FromBody] EamuseXrpcData data)
{
//TODO
data.Document = new XDocument(new XElement("response", new XElement("gametop")));
return data;
}
[HttpPost, Route("8"), XrpcCall("gametop.get_pdata")]
public ActionResult<EamuseXrpcData> GetPdata([FromBody] EamuseXrpcData data)
{
var gametop = data.Document.Element("call").Element("gametop");
var player = gametop.Element("data").Element("player");
string refId = player.Element("refid").Value;
data.Document = new XDocument(new XElement("response", new XElement("gametop",
new XElement("data",
GetInfoElement(),
GetPlayerElement(refId)
)
)));
return data;
}
public static XElement GetInfoElement()
{
return new XElement("info",
new XElement("event_info",
new XElement("event", new XAttribute("type", "15"),
new KU8("state", 1)
),
new XElement("event", new XAttribute("type", "5"),
new KU8("state", 0)
),
new XElement("event", new XAttribute("type", "6"),
new KU8("state", 0)
)
),
new XElement("share_music"),
new XElement("genre_def_music"),
new KS32("black_jacket_list", 64, 0),
new KS32("white_music_list", 64, -1),
new KS32("white_marker_list", 16, -1),
new KS32("white_theme_list", 16, -1),
new KS32("open_music_list", 64, -1),
new KS32("shareable_music_list", 64, -1),
new XElement("jbox",
new KS32("point", 1),
new XElement("emblem",
new XElement("normal",
new KS16("index", 50)
),
new XElement("premium",
new KS16("index", 50)
)
)
),
new XElement("collection",
new XElement("rating_s")
),
new XElement("expert_option",
new KBool("is_available", true)
),
new XElement("all_music_matching",
new KBool("is_available", false)
),
new XElement("department",
new XElement("pack_list")
)
);
}
private XElement GetPlayerElement(string refId)
{
int[] musicList = new int[64]
{
-2013265951, -102760493, 1711275733, -1579088899,
-108536, -227069, -33554401, 16383,
0, -1377473, -402653185, -2097153,
-1231036417, -786433, -444727297, -1,
980541439, -33357824, 1077928957, 133988323,
1075838048, -32706, -234907777, -196609,
33138687, -2097152, -907557381, -2,
-134217841, -34734081, -524293, -1641628417,
-1, -1, -2177, -7532097,
-3, 264241151, 2080768, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0
};
int[] secretList = musicList;
int[] themeList = new int[16] { 1023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int[] markerList = new int[16] { -1, 7167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int[] titleList = new int[160];
titleList[0] = 1;
titleList[5] = 65536;
titleList[11] = 1024;
titleList[12] = 1048576;
int[] partsList = new int[160];
partsList[0] = 1;
partsList[58] = -2147483648;
partsList[60] = 32;
int[] emblemList = new int[96];
emblemList[0] = 1;
emblemList[7] = 16;
emblemList[13] = 536870916;
emblemList[16] = 65536;
emblemList[18] = 4194304;
emblemList[22] = 268435456;
emblemList[24] = 65536;
emblemList[25] = 8388624;
emblemList[33] = 147456;
emblemList[37] = 4194312;
emblemList[38] = 33554432;
emblemList[39] = 205520896;
emblemList[42] = 2080;
emblemList[43] = 2;
emblemList[45] = 512;
int[] commuList = markerList;
return new XElement("player",
new KS32("jid", 612645048),
new KS32("session_id", 1),
new KStr("name", "CLANTEST"),
new KU64("event_flag", 2),
new XElement("info",
new KS32("tune_cnt", 991),
new KS32("save_cnt", 0),
new KS32("saved_cnt", 45),
new KS32("fc_cnt", 40),
new KS32("ex_cnt", 0),
new KS32("clear_cnt", 946),
new KS32("match_cnt", 0),
new KS32("beat_cnt", 0),
new KS32("mynews_cnt", 0),
new KS32("mtg_entry_cnt", 0),
new KS32("mtg_hold_cnt", 0),
new KU8("mtg_result", 0),
new KS32("bonus_tune_points", 320),
new KBool("is_bonus_tune_played", true)
),
new XElement("last",
new KS64("play_time", 0),
new KStr("shopname", "x"),
new KStr("areaname", "x"),
new KS32("music_id", 70000183),
new KS8("seq_id", 1),
new KStr("seq_edit_id", ""),
new KS8("sort", 3),
new KS8("category", 24),
new KS8("expert_option", 0),
new XElement("settings",
new KS8("marker", 3),
new KS8("theme", 6),
new KS16("title", 0),
new KS16("parts", 0),
new KS8("rank_sort", 1),
new KS8("combo_disp", 1),
new KS16("emblem", new short[] { 0, 823, 0, 0, 0 }),
new KS8("matching", 0),
new KS8("hard", 0),
new KS8("hazard", 0)
)
),
new XElement("item",
new KS32("music_list", musicList),
new KS32("secret_list", secretList),
new KS32("theme_list", themeList),
new KS32("marker_list", markerList),
new KS32("title_list", titleList),
new KS32("parts_list", partsList),
new KS32("emblem_list", emblemList),
new KS32("commu_list", commuList),
new XElement("new",
new KS32("secret_list", 64, 0),
new KS32("theme_list", 16, 0),
new KS32("marker_list", 16, 0)
)
),
new XElement("team", new XAttribute("id", "1"),
new KS32("section", 4),
new KS32("street", 6),
new KS32("house_number_1", 67),
new KS32("house_number_2", 1),
new XElement("move",
new XAttribute("house_number_1", 67),
new XAttribute("house_number_2", 1),
new XAttribute("id", 1),
new XAttribute("section", 4),
new XAttribute("street", 6)
)
),
new XElement("jbox",
new KS32("point", 700),
new XElement("emblem",
new XElement("normal",
new KS16("index", 1182)
),
new XElement("premium",
new KS16("index", 1197)
)
)
),
new XElement("news",
new KS16("checked", 0),
new KU32("checked_flag", 1)
),
new XElement("free_first_play",
new KBool("is_available", false)
),
new XElement("event_info",
new XElement("event", new XAttribute("type", "15"),
new KU8("state", 1)
)
),
new XElement("new_music"),
new XElement("gift_list"),
new XElement("jubility", new XAttribute("param", "0"),
new XElement("target_music_list")
),
new XElement("born",
new KS8("status", 1),
new KS16("year", 2000)
),
new XElement("question_list"),
new XElement("official_news",
new XElement("news_list")
),
GenDroplist(),
new XElement("daily_bonus_list"),
GenClanCourseList(),
new XElement("server"),
new XElement("rivallist"),
new XElement("fc_challenge",
new XElement("today",
new KS32("music_id", 40000057),
new KU8("state", 0)
),
new XElement("whim",
new KS32("music_id", 30000041),
new KU8("state", 80)
)
),
new XElement("navi",
new KU64("flag", 122)
)
);
}
private static XElement GenClanCourseList()
{
XElement categoryList = new XElement("category_list");
for (int i = 1; i <= 6; ++i)
{
categoryList.Add(new XElement("category", new XAttribute("id", i),
new KBool("is_display", true)
));
}
return new XElement("clan_course_list",
new XElement("clan_course", new XAttribute("id", "50"),
new KS8("status", 1)
),
categoryList
);
}
private static XElement GenDroplist()
{
var res = new XElement("drop_list");
var item_list = new XElement("item_list");
for (int i = 1; i <= 10; ++i)
{
item_list.Add(new XElement("item", new XAttribute("id", i),
new KS32("num", 0)
));
}
for (int i = 1; i <= 10; ++i)
{
res.Add(new XElement("drop", new XAttribute("id", i),
new KS32("exp", 0),
new KS32("flag", 0),
item_list
));
}
return res;
}
[HttpPost, Route("8"), XrpcCall("gametop.get_mdata")]
public ActionResult<EamuseXrpcData> GetMdata([FromBody] EamuseXrpcData data)
{
//TODO
data.Document = new XDocument(new XElement("response", new XElement("gametop")));
return data;
}
[HttpPost, Route("8"), XrpcCall("gametop.get_meeting")]
public ActionResult<EamuseXrpcData> GetMeeting([FromBody] EamuseXrpcData data)
{
//TODO
data.Document = new XDocument(new XElement("response", new XElement("gametop")));
return data;
}
}
}

View File

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;
using Microsoft.AspNetCore.Mvc;
using eAmuseCore.KBinXML;
using ClanServer.Routing;
namespace ClanServer.Controllers.L44
{
[ApiController, Route("L44")]
public class LobbyController : ControllerBase
{
[HttpPost, Route("8"), XrpcCall("lobby.check")]
public ActionResult<EamuseXrpcData> Check([FromBody] EamuseXrpcData data)
{
//TODO
data.Document = new XDocument(new XElement("response", new XElement("lobby")));
return data;
}
[HttpPost, Route("8"), XrpcCall("lobby.entry")]
public ActionResult<EamuseXrpcData> Entry([FromBody] EamuseXrpcData data)
{
//TODO
data.Document = new XDocument(new XElement("response", new XElement("lobby")));
return data;
}
}
}

View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;
using Microsoft.AspNetCore.Mvc;
using eAmuseCore.KBinXML;
using ClanServer.Routing;
namespace ClanServer.Controllers.L44
{
[ApiController, Route("L44")]
public class RecommendController : ControllerBase
{
[HttpPost, Route("8"), XrpcCall("recommend.get_recommend")]
public ActionResult<EamuseXrpcData> GetRecommend([FromBody] EamuseXrpcData data)
{
//TODO
data.Document = new XDocument(new XElement("response", new XElement("get_pdata")));
return data;
}
}
}

View File

@ -10,7 +10,7 @@ using eAmuseCore.KBinXML;
using ClanServer.Formatters;
using ClanServer.Routing;
namespace ClanServer.Controllers.Core
namespace ClanServer.Controllers.L44
{
[ApiController, Route("L44")]
public class ShopinfoController : ControllerBase
@ -28,50 +28,7 @@ namespace ClanServer.Controllers.Core
new KU32("exist", 0)
),
new KU64("event_flag", 0),
new XElement("info",
new XElement("event_info",
new XElement("event", new XAttribute("type", "15"),
new KU8("state", 1)
),
new XElement("event", new XAttribute("type", "5"),
new KU8("state", 0)
),
new XElement("event", new XAttribute("type", "6"),
new KU8("state", 0)
)
),
new XElement("share_music"),
new XElement("genre_def_music"),
new KS32("black_jacket_list", 64, 0),
new KS32("white_music_list", 64, -1),
new KS32("white_marker_list", 16, -1),
new KS32("white_theme_list", 16, -1),
new KS32("open_music_list", 64, -1),
new KS32("shareable_music_list", 64, -1),
new XElement("jbox",
new KS32("point", 1),
new XElement("emblem",
new XElement("normal",
new KS16("index", 50)
),
new XElement("premium",
new KS16("index", 50)
)
)
),
new XElement("collection",
new XElement("rating_s")
),
new XElement("expert_option",
new KBool("is_available", true)
),
new XElement("all_music_matching",
new KBool("is_available", false)
),
new XElement("department",
new XElement("pack_list")
)
)
GametopController.GetInfoElement()
))));
return data;

View File

@ -15,9 +15,9 @@ namespace eAmuseTest
{
static void Main(string[] args)
{
string compress = "none";
string eamuse_info = "1-5cf04a26-56c5";
byte[] data = HexToBytes("a7a4eef0f58176b89e5f6d0c91df45549f0fdb12a7ea731e9f2f52a85db742ed71eceeee848cfcedf8ca2b59161900ba");
string compress = "lz77";
string eamuse_info = "1-5cf04a26-3fad";
byte[] data = HexToBytes("192b636607070f377148b5595cd163d2f224970b04a6aceae90c1885895c265707be27cdb266822bac0a49a9ccdc67218b34e5f52efcd797bc0ac5e2bee85e252b03e152865c6f0fb9e9bfa31c8f76feef59cb00fb6fb2e33f265d91adab4cbb49221b4c3453047cb7ca865cfd904417b526ff8b0310b5a64e3afc303ed3c756d36fd341e5541025ee0d740da97b3e739aaf1e49520fb39d860c6e43c42eab9b31523733942a81d671468301d5f3cb9b2e15ea8de4151ccc6414afb4ed062437257f082b2a446f089b9fa40c4fd9c60c80b612c3990f4002cf983b29616e32f7a545de443531fa0570fed58106a4bb77194f8bea18d347165caabe5332a12fe69e78e91c8b18b02eab9f205cc31021ae63270398e9610e04297b709dacf3310c14df753d8affae0d3f1b6712f8d663b7262a8d351e8184e5cfcf1fb2ac83a4ac2eefb918cae357b3013ea3a45b4906f7e5dbdf0eb9cdaced18acd5836e4ec05cc221b68217f2cd7abe90a0b70e3a7bb19c3dd54c623f554c3ce409c194d6fe104c1dbea3e9e61726336b59c1d27b7fd05f746b767d28209a4dbe432e06d3322fcd3dd92fe7dc950d9d2de6a54999938cbe76f483751b69d969e7cbf20179b91fb97fe5fe285ecdea9b754f649305909afa56b0c85c5335cc805cd1cfce2ac5656da1b46f9a50147dfe1d9d0e98f17c149daba41d9628bd77adad0e9c3e7c8b8ee3f6c1e112f3b770dfe361626107264a618b5db4fc70bd46c147031ccbe07ec7face27d5473f4bc414db4b1d37e913b2c31eac8e3a7819566f7b297495422e77cc7a6a3a9a5bd35d290ea2c32bedde889110400a668312c81b5958c8c2c65797e6cd2bc1e28d70be10e7e873dd5ecea371eba78f13bddf913d37465a5b3b81be08a5e911d34b4801838073b2bd8e53c0c0f559f3b9b39bbc663f9f1b7b907ffc436f3d35517d9c297c0a9a7ed7e492cbce674df575d22025e3b80d630d6fe3142c2b72adbb896b9b08b86ace6af4f38655c18894ccc6ea0ae6bcea31e01b70a642b65e530e5e3cf0d479f6b07faede5c545c139203f6abae96957df6899d7f9a638bb52bb20a53e804218ac031287c415b28de6e1d49b3875125212cd4090915ef1fc88dead3dfa77fff6b4c9fcc93148cd674f84e1fb49d91288b80c298691fdeb98a832fa85b1da2a9a067640849bdef235b2af8baa7ee3e31983e3327a0d4550c72fdf1722e72b98c2431c7f58ca2e76814faee980eaf22f0ba73c6a199d69d36261f118255ccc6e13041a82ad98837c12634c1e0ce5b8461c7e326bbdec46c1f3d2165be3a22a05c2f30be704337f45c455613800a14e333c1dd2a31a4b344e395cbe57a75a340babd40ebbd9e60008a62956c3eb3add3d53891243ca7c4875651b7a5cac07336c55f37548c3576243af80762334af9c66458bfce1946969ca5fdfa4944f957cb5ad029442624b35fa1783b613247ec2c292cc9b59c2ba767b6e083b813f80bbe2120891956f6235b55811af6aae6e80759805ed73e6e1c43c8d8fcefaf844473d7e3f329ab62a705fc04fb68561f76c23fd2ad1bd1c0fd5e8e3ea68b42ee4d220833fe7e488bfc87319decbe512857a55e7505a5c3760d0623ae170ba541afe9cb7880a82607be87c91eefb95ce67cadd30816320641c923a0431aa69d897bf017cb11712170e3d3425de7357fd7c5970dd0611e0645bc0b19489236e00db3a85bcc13846f2432074a373d4766bf88f0eb1e349c63f98d160aafa29ffc2c6da89c3e4036a5573c8883c53f62d83e76a7b0412a1868230cc16c78e24f61e249cd0f66f05a2d976fc9ad5f0d19013866236c8db928b18ccc2e42c27942f3b03a2bdd98160c7c19c06f8b47189e40c56a66482f78c0864d6637247054004c84a7f909fd78351da411d858d0403f15cf7de0b57f716a2c1c3044d1a337a4785c67f278bc82be8b246d0974cffe7305bbae18bbdbe3e1ca00699894e6fb9576cfea806be34e895eaae33f56214fda4b7c9804f5e12153ff2d81b53e7eae5d9afdd3a2d935ce62e757b9afc7086bb44c204e1bc9d9d6e39600bebf3e7f3fd21e825f94dc30cf4e3c73bdf7ea21ba75fd38cc98121d287b5983ec591f06979c875a653923ba34992559b1773e58de0862d1685cf91993511c312b9e16a0e8ec64f456c49c13d9eb0cf4b31c754318a17de0c162e41e79afa0a05dd79c98f61db2d8d500894f0ced55a816a7da3b9ea4361e7912a90258bc0f2b2fa2cbf7e85b70ae067b78291830d1343a8bf91e0127650cdd67d18359a53aed1b71b3adfdb0fbefc3c3fdb133f4241581182a86b4f6783d328c1f4be0180e350704c5ec808ec44322816e084cda96632d4d073afff921f76e1c166716f6a7de2ba5cc555a69561007d96e1fb7acf1b4e6e4a0c979818dde562a17d3d49f6a4a503892f5e04b543c91bdb2150df3fc2eb1860e4643217ebfdab57aff73de05a546ee653eaec1216ed1e8b73f50e2a2a84c1f0437ed16f7ea557a6c32ba46db79edce000b211d5ab0166e82085fda2881d5e22e62131a031c93158a78a4118f5d28d3ce4a0ca9747dac83e0ed2ae1f594b83af110524e252c0dc331f06a2b608396878fe92e531fd76bfb590c202bd2e9a899b44d716e459329b4b6791ff79dfd8b2303ec4e9c0af4bc022727589795d6f7e4c633994824724f2783dbc74b4c79430009505c7c7ffd7c74c361a857aa336776c66d06fde104f68c9931ae2df44eb71280cc8f46a8d546c6c768f3bea7f395c9dc3f28645f72965ae73d0639385e26d2240bcb2f61bb016b9013a4533c32811081c93f88a05e6824edb19b9568ee9693dab036b7ea68693d584455afa0d6169f4e634d848468a2fd2310b0a377de58a2694bc38cb6c9de0ca5eada717ed623db1f637f5a7a67d8642eae3dd6bc605813f2e76c811da394df950d55b40eba83b12b90dd6b5b487fe11bf0ff882a024a85051657c81dbff31dd7bc79da0a7181449c452e67ce6cf012f0e30e37264f034aecc33db1e356371f901439fc2c8d69b3ee0388cbd0ab83692f9a32e113403de48bb10741aa485eca3392a09b0fb64fc7ecd4ab408fd05bd48aa58852f111df8e508e7945ed23c41bb3a2db3e4f4b7f1d83f7ac429f5406b76a83452223db9694668f2b24c7b9ab7c119d64d8c022bc6cd9802868ead9a2182f1385766153c25c77bf512825c2af8aad25eea29a809df5ccc9167316acb13829cd7086ce7dbe03cca7aa4db28ed9ef14ee204c51b5a580495cbf345f731db33783cc8cddffd66f101f110963978a3804fa0fcceab61cd11a8e5c08a6c965a14ee09fd9375b20646b25a7eee4ffa11f5f8ac69d28304c71726f8e75");
compress = compress.ToLower();