BattleServer.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using ServerLib;
  7. using System.IO;
  8. using System.Threading;
  9. using Newtonsoft.Json.Linq;
  10. using SLua;
  11. namespace GameLogic
  12. {
  13. public class BattleServer : ServerLib.HttpServer
  14. {
  15. /// <summary>
  16. /// 构造函数
  17. /// </summary>
  18. /// <param name="ipAddress">IP地址</param>
  19. /// <param name="port">端口号</param>
  20. public BattleServer(string ipAddress, int port)
  21. : base(ipAddress, port)
  22. {
  23. }
  24. public override void OnPost(HttpRequest request, HttpResponse response)
  25. {
  26. // 获取客户端传递的参数
  27. // string data = request.Params == null ? "" : string.Join(";", request.Params.Select(x => x.Key + "=" + x.Value).ToArray());
  28. Log("url->" + request.URL);
  29. if (request.URL.Equals("/fight/reqstartbattle"))
  30. {
  31. LuaState luaState = new LuaState();
  32. try
  33. {
  34. // LuaSvrObject luaSvrObject = LuaManager.getInstance().getOneSvr();
  35. // luaSvrObject.isWorking = true;
  36. // Log("----------->" + luaSvrObject.no);
  37. // Log("----------->" + luaSvrObject.svr.luaState.isMainThread());
  38. // // 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\":{}}}";
  39. // string req = request.Params.ToString();
  40. // luaSvrObject.svr.luaState.getFunction("serverBattleStart").call(req);
  41. // luaSvrObject.svr.luaState.getFunction("serverBattleEnd").call();
  42. // Object result = luaSvrObject.svr.luaState.getFunction("getBattleResult").call();
  43. // luaSvrObject.isWorking = false;
  44. // while (LuaState.main != null)
  45. // {
  46. // Log("----------->wait!!");
  47. // }
  48. // svr.start("battle/server.lua");
  49. luaState.doFile("battle/server.lua");
  50. string req = request.Params.ToString();
  51. // Log("----------->" + Thread.CurrentThread.ManagedThreadId.ToString());
  52. // Log("----------->" + (LuaState.main == null));
  53. // 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\":{}}}";
  54. // svr.luaState.getFunction("serverBattleStart").call(req);
  55. // svr.luaState.getFunction("serverBattleEnd").call();
  56. // Object result = svr.luaState.getFunction("getBattleResult").call();
  57. Object result = luaState.getFunction("callBattleResult").call(req);
  58. // 释放掉吧,怕复用出问题,毕竟没有找到checktop相关接口
  59. // svr.luaState.Close();
  60. string content = result.ToString();
  61. response.SetContent(content);
  62. // response.SetContent(Thread.CurrentThread.ManagedThreadId.ToString()+"-->"+DateTime.Now.ToString());
  63. // JObject rsp = new JObject();
  64. // rsp.Add(new JProperty("code", 200));
  65. // // rsp.Add(new JProperty("content", new JObject(new JProperty("data", content))));
  66. // rsp.Add(new JProperty("content", new JObject(JObject.Parse(content))));
  67. // response.SetContent(rsp.ToString());
  68. }
  69. catch (Exception e)
  70. {
  71. Console.WriteLine(e);
  72. response.SetContent("400");
  73. }
  74. luaState.Dispose();
  75. }
  76. else if (request.URL.Equals("/fight/check"))
  77. {
  78. JObject rsp = new JObject();
  79. rsp.Add(new JProperty("code", 200));
  80. rsp.Add(new JProperty("msg", "ready ok"));
  81. response.SetContent(rsp.ToString());
  82. }
  83. else
  84. {
  85. JObject rsp = new JObject();
  86. rsp.Add(new JProperty("code", 404));
  87. rsp.Add(new JProperty("msg", "invalid url"));
  88. response.SetContent(rsp.ToString());
  89. }
  90. //构造响应报文
  91. response.Content_Encoding = "utf-8";
  92. response.StatusCode = "200";
  93. response.Content_Type = "application/json";
  94. response.Headers["Server"] = "BattleServer";
  95. //发送响应
  96. response.Send();
  97. }
  98. public override void OnGet(HttpRequest request, HttpResponse response)
  99. {
  100. ///链接形式1:"http://localhost:4050/assets/styles/style.css"表示访问指定文件资源,
  101. ///此时读取服务器目录下的/assets/styles/style.css文件。
  102. ///链接形式1:"http://localhost:4050/assets/styles/"表示访问指定页面资源,
  103. ///此时读取服务器目录下的/assets/styles/style.index文件。
  104. //当文件不存在时应返回404状态码
  105. string requestURL = request.URL;
  106. requestURL = requestURL.Replace("/", @"\").Replace("\\..", "").TrimStart('\\');
  107. string requestFile = Path.Combine(ServerRoot, requestURL);
  108. //判断地址中是否存在扩展名
  109. string extension = Path.GetExtension(requestFile);
  110. //根据有无扩展名按照两种不同链接进行处
  111. if (extension != "")
  112. {
  113. //从文件中返回HTTP响应
  114. response = response.FromFile(requestFile);
  115. }
  116. else
  117. {
  118. //目录存在且不存在index页面时时列举目录
  119. if (Directory.Exists(requestFile) && !File.Exists(requestFile + "\\index.html"))
  120. {
  121. requestFile = Path.Combine(ServerRoot, requestFile);
  122. var content = ListDirectory(requestFile, requestURL);
  123. response = response.SetContent(content, Encoding.UTF8);
  124. response.Content_Type = "text/html; charset=UTF-8";
  125. }
  126. else
  127. {
  128. //加载静态HTML页面
  129. requestFile = Path.Combine(requestFile, "index.html");
  130. response = response.FromFile(requestFile);
  131. response.Content_Type = "text/html; charset=UTF-8";
  132. }
  133. }
  134. //发送HTTP响应
  135. response.Send();
  136. }
  137. public override void OnDefault(HttpRequest request, HttpResponse response)
  138. {
  139. response.SetContent("");
  140. response.Content_Encoding = "utf-8";
  141. response.StatusCode = "200";
  142. response.Content_Type = "text/html; charset=UTF-8";
  143. response.Headers["Server"] = "BattleServer";
  144. //发送响应
  145. response.Send();
  146. }
  147. private string ConvertPath(string[] urls)
  148. {
  149. string html = string.Empty;
  150. int length = ServerRoot.Length;
  151. foreach (var url in urls)
  152. {
  153. var s = url.StartsWith("..") ? url : url.Substring(length).TrimEnd('\\');
  154. html += String.Format("<li><a href=\"{0}\">{0}</a></li>", s);
  155. }
  156. return html;
  157. }
  158. private string ListDirectory(string requestDirectory, string requestURL)
  159. {
  160. //列举子目录
  161. var folders = requestURL.Length > 1 ? new string[] { "../" } : new string[] { };
  162. folders = folders.Concat(Directory.GetDirectories(requestDirectory)).ToArray();
  163. var foldersList = ConvertPath(folders);
  164. //列举文件
  165. var files = Directory.GetFiles(requestDirectory);
  166. var filesList = ConvertPath(files);
  167. //构造HTML
  168. StringBuilder builder = new StringBuilder();
  169. builder.Append(string.Format("<html><head><title>{0}</title></head>", requestDirectory));
  170. builder.Append(string.Format("<body><h1>{0}</h1><br/><ul>{1}{2}</ul></body></html>",
  171. requestURL, filesList, foldersList));
  172. return builder.ToString();
  173. }
  174. }
  175. }