using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Results;
using System.Web;
using System.IO;
using MongoDB.Bson;
using MongoDB.Driver;
using Newtonsoft.Json.Linq;
using ShadowEditor.Server.Base;
using ShadowEditor.Server.Helpers;
using Newtonsoft.Json;
namespace ShadowEditor.Server.Controllers
{
///
/// 发布控制器
///
public class PublishController : ApiBase
{
///
/// 发布静态网站
///
///
[HttpPost]
public JsonResult Publish()
{
this.CopyAssets();
this.CreateDataFile();
return Json(new
{
Code = 200,
Msg = "发布成功!"
});
}
///
/// 复制资源到示例文件夹
///
private void CopyAssets()
{
var server = HttpContext.Current.Server;
// 复制html文件
var sourceName = server.MapPath("~/index.html");
var destName = server.MapPath("~/examples/index.html");
File.Copy(sourceName, destName, true);
var text = File.ReadAllText(destName).Replace("location.origin", "'.'"); // 使api路径变为当前目录
File.WriteAllText(destName, text);
// 复制dist文件夹
var dirName = server.MapPath("~/examples/dist/");
sourceName = server.MapPath("~/dist/ShadowEditor.js");
destName = server.MapPath("~/examples/dist/ShadowEditor.js");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
File.Copy(sourceName, destName, true);
text = File.ReadAllText(destName).Replace("Load?ID=", "Scene_"); // 转换场景加载路径
File.WriteAllText(destName, text);
// 复制assets文件夹
sourceName = server.MapPath("~/assets");
destName = server.MapPath("~/examples/assets");
DirectoryHelper.Copy(sourceName, destName);
// 复制Upload文件夹
sourceName = server.MapPath("~/Upload");
destName = server.MapPath("~/examples/Upload");
DirectoryHelper.Copy(sourceName, destName);
// 复制网站图标
sourceName = server.MapPath("~/favicon.ico");
destName = server.MapPath("~/examples/favicon.ico");
File.Copy(sourceName, destName, true);
}
///
/// 通过调用API接口,创建数据文件
///
private void CreateDataFile()
{
var server = HttpContext.Current.Server;
var dirName = server.MapPath("~/api/");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
this.CreateAudioDataFile();
this.CreateMeshDataFile();
this.CreateMMDDataFile();
this.CreatePublishDataFile();
this.CreateSceneDataFile();
this.CreateTextureDataFile();
this.CreateUploadDataFile();
}
///
/// 创建音频数据文件
///
private void CreateAudioDataFile()
{
var server = HttpContext.Current.Server;
var request = HttpContext.Current.Request;
var host = request.Url.Host;
var port = request.Url.Port;
var result = HttpHelper.Get($"http://{host}:{port}/api/Audio/List");
var dirName = server.MapPath("~/examples/api/Audio");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
// 获取列表
var fileName = server.MapPath("~/examples/api/Audio/List");
File.WriteAllText(fileName, result);
// 其他接口
var apiList = new string[] { "/examples/api/Audio/Add", "/examples/api/Audio/Edit", "/examples/api/Audio/Delete" };
var data = JsonConvert.SerializeObject(new { Code = 300, Msg = "静态网站,操作失败!" });
foreach (var i in apiList)
{
fileName = server.MapPath($"~{i}");
File.WriteAllText(fileName, data);
}
}
///
/// 创建模型数据文件
///
private void CreateMeshDataFile()
{
var server = HttpContext.Current.Server;
var request = HttpContext.Current.Request;
var host = request.Url.Host;
var port = request.Url.Port;
var result = HttpHelper.Get($"http://{host}:{port}/api/Mesh/List");
var dirName = server.MapPath("~/examples/api/Mesh");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
// 获取列表
var fileName = server.MapPath("~/examples/api/Mesh/List");
File.WriteAllText(fileName, result);
// 其他接口
var apiList = new string[] { "/examples/api/Mesh/Add", "/examples/api/Mesh/Edit", "/examples/api/Mesh/Delete" };
var data = JsonConvert.SerializeObject(new { Code = 300, Msg = "静态网站,操作失败!" });
foreach (var i in apiList)
{
fileName = server.MapPath($"~{i}");
File.WriteAllText(fileName, data);
}
}
///
/// 创建MMD数据文件
///
private void CreateMMDDataFile()
{
var server = HttpContext.Current.Server;
var request = HttpContext.Current.Request;
var host = request.Url.Host;
var port = request.Url.Port;
var result = HttpHelper.Get($"http://{host}:{port}/api/MMD/List");
var dirName = server.MapPath("~/examples/api/MMD");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
// 获取列表
var fileName = server.MapPath("~/examples/api/MMD/List");
File.WriteAllText(fileName, result);
// 其他接口
var apiList = new string[] { "/examples/api/MMD/Add", "/examples/api/MMD/Edit", "/examples/api/MMD/Delete" };
var data = JsonConvert.SerializeObject(new { Code = 300, Msg = "静态网站,操作失败!" });
foreach (var i in apiList)
{
fileName = server.MapPath($"~{i}");
File.WriteAllText(fileName, data);
}
}
///
/// 创建发布数据文件
///
private void CreatePublishDataFile()
{
var server = HttpContext.Current.Server;
var dirName = server.MapPath("~/examples/api/Publish/");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
// 其他接口
var apiList = new string[] { "/examples/api/Publish/Publish" };
var data = JsonConvert.SerializeObject(new { Code = 300, Msg = "静态网站,操作失败!" });
foreach (var i in apiList)
{
var fileName = server.MapPath($"~{i}");
File.WriteAllText(fileName, data);
}
}
///
/// 创建场景数据文件
///
private void CreateSceneDataFile()
{
var server = HttpContext.Current.Server;
var request = HttpContext.Current.Request;
var host = request.Url.Host;
var port = request.Url.Port;
var result = HttpHelper.Get($"http://{host}:{port}/api/Scene/List");
var dirName = server.MapPath("~/examples/api/Scene");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
// 获取列表
var fileName = server.MapPath("~/examples/api/Scene/List");
File.WriteAllText(fileName, result);
// 导出场景
var obj = JsonConvert.DeserializeObject(result);
var array = obj["Data"] as JArray;
foreach (var i in array)
{
var id = i["ID"].ToString();
result = HttpHelper.Get($"http://{host}:{port}/api/Scene/Load?ID={id}");
fileName = server.MapPath($"~/examples/api/Scene/Scene_{id}");
File.WriteAllText(fileName, result);
}
// 其他接口
var apiList = new string[] { "/examples/api/Scene/Edit", "/examples/api/Scene/Save", "/examples/api/Scene/Delete" };
var data = JsonConvert.SerializeObject(new { Code = 300, Msg = "静态网站,操作失败!" });
foreach (var i in apiList)
{
fileName = server.MapPath($"~{i}");
File.WriteAllText(fileName, data);
}
}
///
/// 创建纹理数据文件
///
private void CreateTextureDataFile()
{
var server = HttpContext.Current.Server;
var request = HttpContext.Current.Request;
var host = request.Url.Host;
var port = request.Url.Port;
var result = HttpHelper.Get($"http://{host}:{port}/api/Texture/List");
var dirName = server.MapPath("~/examples/api/Texture");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
// 获取列表
var fileName = server.MapPath("~/examples/api/Texture/List");
File.WriteAllText(fileName, result);
// 其他接口
var apiList = new string[] { "/examples/api/Texture/Add", "/examples/api/Texture/Edit", "/examples/api/Texture/Delete" };
var data = JsonConvert.SerializeObject(new { Code = 300, Msg = "静态网站,操作失败!" });
foreach (var i in apiList)
{
fileName = server.MapPath($"~{i}");
File.WriteAllText(fileName, data);
}
}
///
/// 创建上传数据文件
///
private void CreateUploadDataFile()
{
var server = HttpContext.Current.Server;
var dirName = server.MapPath("~/examples/api/Upload");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
// 其他接口
var apiList = new string[] { "/examples/api/Upload/Upload" };
var data = JsonConvert.SerializeObject(new { Code = 300, Msg = "静态网站,操作失败!" });
foreach (var i in apiList)
{
var fileName = server.MapPath($"~{i}");
File.WriteAllText(fileName, data);
}
}
}
}