using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ServerLib; using System.IO; using System.Threading; using Newtonsoft.Json.Linq; using SLua; namespace GameLogic { public class BattleServer : ServerLib.HttpServer { /// /// 构造函数 /// /// IP地址 /// 端口号 public BattleServer(string ipAddress, int port) : base(ipAddress, port) { } public override void OnPost(HttpRequest request, HttpResponse response) { // 获取客户端传递的参数 // string data = request.Params == null ? "" : string.Join(";", request.Params.Select(x => x.Key + "=" + x.Value).ToArray()); Log("url->" + request.URL); if (request.URL.Equals("/fight/reqstartbattle")) { LuaState luaState = new LuaState(); try { // LuaSvrObject luaSvrObject = LuaManager.getInstance().getOneSvr(); // luaSvrObject.isWorking = true; // Log("----------->" + luaSvrObject.no); // Log("----------->" + luaSvrObject.svr.luaState.isMainThread()); // // string req = "{\"fightUuid\":\"9cb05ebd-30b8-492f-9946-77571473d88f\",\"mode\":11,\"stage_id\":102057,\"run_speed\":0,\"seed\":1544248913,\"is_auto_skill\":true,\"is_replay\":false,\"left\":[{\"uuid\":\"33569706-4a1b-4472-9b91-78b2203f2958\",\"cfgid\":1001312,\"tid\":1,\"level\":80,\"quality\":5,\"power\":21287.0,\"attr_info\":{\"CRIT\":0.2,\"ATK\":2911.0,\"DEF\":665.0,\"HP\":27558.0,\"MIMU\":0.06,\"Dodge\":45.0,\"Speed\":6.0,\"POWER\":21287.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"Force\":21287.0,\"Decreases\":50.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":101312101,\"level\":1}],\"3\":[{\"cfgid\":101312201,\"level\":2},{\"cfgid\":101312301,\"level\":1},{\"cfgid\":101312401,\"level\":1}]}},{\"uuid\":\"1bbbd3d2-4bda-4233-a774-bacec4a2e368\",\"cfgid\":1004309,\"tid\":2,\"level\":80,\"quality\":5,\"power\":16203.0,\"attr_info\":{\"CRIT\":0.17,\"ATK\":2296.0,\"DEF\":414.0,\"HP\":22069.0,\"Dodge\":30.0,\"Speed\":5.0,\"POWER\":16203.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":16203.0,\"Decreases\":50.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":104309101,\"level\":1}],\"3\":[{\"cfgid\":104309201,\"level\":2},{\"cfgid\":104309301,\"level\":1},{\"cfgid\":104309401,\"level\":1}]}},{\"uuid\":\"d43aba8e-4a43-49bc-9a76-e69912931347\",\"cfgid\":1004201,\"tid\":3,\"level\":80,\"quality\":5,\"power\":9455.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":1309.0,\"DEF\":234.0,\"HP\":15743.0,\"Dodge\":4.0,\"POWER\":9455.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":9455.0,\"Decreases\":50.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":104201101,\"level\":2}],\"3\":[{\"cfgid\":104201201,\"level\":2},{\"cfgid\":104201301,\"level\":1}]}},{\"uuid\":\"71a935b6-8d77-4e6a-8118-7d9f3c6c5124\",\"cfgid\":1003201,\"tid\":4,\"level\":80,\"quality\":3,\"power\":13639.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":1758.0,\"DEF\":541.0,\"HP\":17206.0,\"Hit\":96.0,\"PIMU\":0.09,\"Dodge\":15.0,\"SeCure\":50.0,\"Speed\":2.0,\"POWER\":13639.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"MIMU\":0.0,\"Force\":13639.0,\"Decreases\":50.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":103201101,\"level\":2}],\"3\":[{\"cfgid\":103201201,\"level\":2},{\"cfgid\":103201301,\"level\":1}]}}],\"right\":[{\"uuid\":null,\"cfgid\":1001201,\"tid\":11,\"level\":11,\"quality\":3,\"power\":1222.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":101.0,\"DEF\":23.0,\"HP\":1852.0,\"POWER\":1222.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":1222.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":101201101,\"level\":1}],\"3\":[{\"cfgid\":101201201,\"level\":1}]}},{\"uuid\":null,\"cfgid\":1001203,\"tid\":12,\"level\":11,\"quality\":3,\"power\":1223.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":114.0,\"DEF\":21.0,\"HP\":1646.0,\"POWER\":1223.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":1223.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":101203101,\"level\":1}],\"3\":[{\"cfgid\":101203201,\"level\":1}]}},{\"uuid\":null,\"cfgid\":1002202,\"tid\":13,\"level\":11,\"quality\":3,\"power\":1226.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":114.0,\"DEF\":21.0,\"HP\":1675.0,\"POWER\":1226.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":1226.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":102202101,\"level\":1}],\"3\":[{\"cfgid\":102202201,\"level\":1}]}},{\"uuid\":null,\"cfgid\":1003202,\"tid\":14,\"level\":11,\"quality\":3,\"power\":1223.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":135.0,\"DEF\":20.0,\"HP\":1293.0,\"POWER\":1223.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":1223.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":103202101,\"level\":1}],\"3\":[{\"cfgid\":103202201,\"level\":1}]}},{\"uuid\":null,\"cfgid\":1004201,\"tid\":15,\"level\":11,\"quality\":5,\"power\":2158.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":257.0,\"DEF\":45.0,\"HP\":3129.0,\"POWER\":2158.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":2158.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":104201101,\"level\":1}],\"3\":[{\"cfgid\":104201201,\"level\":1}]}}],\"version\":0,\"max_time\":90,\"operation_list\":[],\"extdata\":{\"garland\":{\"left\":1,\"right\":1},\"relic_id_list\":{\"left\":{\"1\":0},\"right\":{\"1\":0}},\"team_hpmp\":{\"left\":{\"hp_r\":1.0,\"mp_r\":0.0},\"right\":{\"hp_r\":1.0,\"mp_r\":0.0}},\"hero_hpmp\":{\"\":{\"hp_r\":1.0,\"mp_r\":0.0}},\"result\":0,\"difficulty_level\":0,\"stage_dynamic_difficulty\":0,\"real_config\":null,\"common\":{}}}"; // string req = request.Params.ToString(); // luaSvrObject.svr.luaState.getFunction("serverBattleStart").call(req); // luaSvrObject.svr.luaState.getFunction("serverBattleEnd").call(); // Object result = luaSvrObject.svr.luaState.getFunction("getBattleResult").call(); // luaSvrObject.isWorking = false; // while (LuaState.main != null) // { // Log("----------->wait!!"); // } // svr.start("battle/server.lua"); luaState.doFile("battle/server.lua"); string req = request.Params.ToString(); // Log("----------->" + Thread.CurrentThread.ManagedThreadId.ToString()); // Log("----------->" + (LuaState.main == null)); // string req = "{\"fightUuid\":\"9cb05ebd-30b8-492f-9946-77571473d88f\",\"mode\":11,\"stage_id\":102057,\"run_speed\":0,\"seed\":1544248913,\"is_auto_skill\":true,\"is_replay\":false,\"left\":[{\"uuid\":\"33569706-4a1b-4472-9b91-78b2203f2958\",\"cfgid\":1001312,\"tid\":1,\"level\":80,\"quality\":5,\"power\":21287.0,\"attr_info\":{\"CRIT\":0.2,\"ATK\":2911.0,\"DEF\":665.0,\"HP\":27558.0,\"MIMU\":0.06,\"Dodge\":45.0,\"Speed\":6.0,\"POWER\":21287.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"Force\":21287.0,\"Decreases\":50.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":101312101,\"level\":1}],\"3\":[{\"cfgid\":101312201,\"level\":2},{\"cfgid\":101312301,\"level\":1},{\"cfgid\":101312401,\"level\":1}]}},{\"uuid\":\"1bbbd3d2-4bda-4233-a774-bacec4a2e368\",\"cfgid\":1004309,\"tid\":2,\"level\":80,\"quality\":5,\"power\":16203.0,\"attr_info\":{\"CRIT\":0.17,\"ATK\":2296.0,\"DEF\":414.0,\"HP\":22069.0,\"Dodge\":30.0,\"Speed\":5.0,\"POWER\":16203.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":16203.0,\"Decreases\":50.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":104309101,\"level\":1}],\"3\":[{\"cfgid\":104309201,\"level\":2},{\"cfgid\":104309301,\"level\":1},{\"cfgid\":104309401,\"level\":1}]}},{\"uuid\":\"d43aba8e-4a43-49bc-9a76-e69912931347\",\"cfgid\":1004201,\"tid\":3,\"level\":80,\"quality\":5,\"power\":9455.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":1309.0,\"DEF\":234.0,\"HP\":15743.0,\"Dodge\":4.0,\"POWER\":9455.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":9455.0,\"Decreases\":50.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":104201101,\"level\":2}],\"3\":[{\"cfgid\":104201201,\"level\":2},{\"cfgid\":104201301,\"level\":1}]}},{\"uuid\":\"71a935b6-8d77-4e6a-8118-7d9f3c6c5124\",\"cfgid\":1003201,\"tid\":4,\"level\":80,\"quality\":3,\"power\":13639.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":1758.0,\"DEF\":541.0,\"HP\":17206.0,\"Hit\":96.0,\"PIMU\":0.09,\"Dodge\":15.0,\"SeCure\":50.0,\"Speed\":2.0,\"POWER\":13639.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"MIMU\":0.0,\"Force\":13639.0,\"Decreases\":50.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":103201101,\"level\":2}],\"3\":[{\"cfgid\":103201201,\"level\":2},{\"cfgid\":103201301,\"level\":1}]}}],\"right\":[{\"uuid\":null,\"cfgid\":1001201,\"tid\":11,\"level\":11,\"quality\":3,\"power\":1222.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":101.0,\"DEF\":23.0,\"HP\":1852.0,\"POWER\":1222.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":1222.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":101201101,\"level\":1}],\"3\":[{\"cfgid\":101201201,\"level\":1}]}},{\"uuid\":null,\"cfgid\":1001203,\"tid\":12,\"level\":11,\"quality\":3,\"power\":1223.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":114.0,\"DEF\":21.0,\"HP\":1646.0,\"POWER\":1223.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":1223.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":101203101,\"level\":1}],\"3\":[{\"cfgid\":101203201,\"level\":1}]}},{\"uuid\":null,\"cfgid\":1002202,\"tid\":13,\"level\":11,\"quality\":3,\"power\":1226.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":114.0,\"DEF\":21.0,\"HP\":1675.0,\"POWER\":1226.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":1226.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":102202101,\"level\":1}],\"3\":[{\"cfgid\":102202201,\"level\":1}]}},{\"uuid\":null,\"cfgid\":1003202,\"tid\":14,\"level\":11,\"quality\":3,\"power\":1223.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":135.0,\"DEF\":20.0,\"HP\":1293.0,\"POWER\":1223.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":1223.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":103202101,\"level\":1}],\"3\":[{\"cfgid\":103202201,\"level\":1}]}},{\"uuid\":null,\"cfgid\":1004201,\"tid\":15,\"level\":11,\"quality\":5,\"power\":2158.0,\"attr_info\":{\"CRIT\":0.05,\"ATK\":257.0,\"DEF\":45.0,\"HP\":3129.0,\"POWER\":2158.0,\"DMGDeep\":0.0,\"Cure\":0.0,\"BeCure\":0.0,\"DMGReduce\":0.0,\"PIMU\":0.0,\"MIMU\":0.0,\"Force\":2158.0},\"skill_info\":{\"ultimate\":{\"cfgid\":0,\"level\":0},\"skill\":[],\"roguelike\":[],\"artifact\":[]},\"skill_list\":{\"2\":[{\"cfgid\":104201101,\"level\":1}],\"3\":[{\"cfgid\":104201201,\"level\":1}]}}],\"version\":0,\"max_time\":90,\"operation_list\":[],\"extdata\":{\"garland\":{\"left\":1,\"right\":1},\"relic_id_list\":{\"left\":{\"1\":0},\"right\":{\"1\":0}},\"team_hpmp\":{\"left\":{\"hp_r\":1.0,\"mp_r\":0.0},\"right\":{\"hp_r\":1.0,\"mp_r\":0.0}},\"hero_hpmp\":{\"\":{\"hp_r\":1.0,\"mp_r\":0.0}},\"result\":0,\"difficulty_level\":0,\"stage_dynamic_difficulty\":0,\"real_config\":null,\"common\":{}}}"; // svr.luaState.getFunction("serverBattleStart").call(req); // svr.luaState.getFunction("serverBattleEnd").call(); // Object result = svr.luaState.getFunction("getBattleResult").call(); Object result = luaState.getFunction("callBattleResult").call(req); // 释放掉吧,怕复用出问题,毕竟没有找到checktop相关接口 // svr.luaState.Close(); string content = result.ToString(); response.SetContent(content); // response.SetContent(Thread.CurrentThread.ManagedThreadId.ToString()+"-->"+DateTime.Now.ToString()); // JObject rsp = new JObject(); // rsp.Add(new JProperty("code", 200)); // // rsp.Add(new JProperty("content", new JObject(new JProperty("data", content)))); // rsp.Add(new JProperty("content", new JObject(JObject.Parse(content)))); // response.SetContent(rsp.ToString()); } catch (Exception e) { Console.WriteLine(e); response.SetContent("400"); } luaState.Dispose(); } else if (request.URL.Equals("/fight/check")) { JObject rsp = new JObject(); rsp.Add(new JProperty("code", 200)); rsp.Add(new JProperty("msg", "ready ok")); response.SetContent(rsp.ToString()); } else { JObject rsp = new JObject(); rsp.Add(new JProperty("code", 404)); rsp.Add(new JProperty("msg", "invalid url")); response.SetContent(rsp.ToString()); } //构造响应报文 response.Content_Encoding = "utf-8"; response.StatusCode = "200"; response.Content_Type = "application/json"; response.Headers["Server"] = "BattleServer"; //发送响应 response.Send(); } public override void OnGet(HttpRequest request, HttpResponse response) { ///链接形式1:"http://localhost:4050/assets/styles/style.css"表示访问指定文件资源, ///此时读取服务器目录下的/assets/styles/style.css文件。 ///链接形式1:"http://localhost:4050/assets/styles/"表示访问指定页面资源, ///此时读取服务器目录下的/assets/styles/style.index文件。 //当文件不存在时应返回404状态码 string requestURL = request.URL; requestURL = requestURL.Replace("/", @"\").Replace("\\..", "").TrimStart('\\'); string requestFile = Path.Combine(ServerRoot, requestURL); //判断地址中是否存在扩展名 string extension = Path.GetExtension(requestFile); //根据有无扩展名按照两种不同链接进行处 if (extension != "") { //从文件中返回HTTP响应 response = response.FromFile(requestFile); } else { //目录存在且不存在index页面时时列举目录 if (Directory.Exists(requestFile) && !File.Exists(requestFile + "\\index.html")) { requestFile = Path.Combine(ServerRoot, requestFile); var content = ListDirectory(requestFile, requestURL); response = response.SetContent(content, Encoding.UTF8); response.Content_Type = "text/html; charset=UTF-8"; } else { //加载静态HTML页面 requestFile = Path.Combine(requestFile, "index.html"); response = response.FromFile(requestFile); response.Content_Type = "text/html; charset=UTF-8"; } } //发送HTTP响应 response.Send(); } public override void OnDefault(HttpRequest request, HttpResponse response) { response.SetContent(""); response.Content_Encoding = "utf-8"; response.StatusCode = "200"; response.Content_Type = "text/html; charset=UTF-8"; response.Headers["Server"] = "BattleServer"; //发送响应 response.Send(); } private string ConvertPath(string[] urls) { string html = string.Empty; int length = ServerRoot.Length; foreach (var url in urls) { var s = url.StartsWith("..") ? url : url.Substring(length).TrimEnd('\\'); html += String.Format("
  • {0}
  • ", s); } return html; } private string ListDirectory(string requestDirectory, string requestURL) { //列举子目录 var folders = requestURL.Length > 1 ? new string[] { "../" } : new string[] { }; folders = folders.Concat(Directory.GetDirectories(requestDirectory)).ToArray(); var foldersList = ConvertPath(folders); //列举文件 var files = Directory.GetFiles(requestDirectory); var filesList = ConvertPath(files); //构造HTML StringBuilder builder = new StringBuilder(); builder.Append(string.Format("{0}", requestDirectory)); builder.Append(string.Format("

    {0}


    ", requestURL, filesList, foldersList)); return builder.ToString(); } } }