using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.IO;
using System.Web;
using System.Reflection;
using WebSocketSharp.Server;
using ShadowEditor.Server.Helpers;
using FubarDev.FtpServer;
using FubarDev.FtpServer.AccountManagement;
using FubarDev.FtpServer.AccountManagement.Anonymous;
using ShadowEditor.Server.Remote.FileSystem;
namespace ShadowEditor.Server.Remote
{
///
/// 远程编辑服务器
///
public class RemoteServer
{
// ftp
private string ftpPort = ConfigurationManager.AppSettings["FTPServerPort"];
private FtpServer ftpServer = null;
// websocket
private string webSocketPort = ConfigurationManager.AppSettings["WebSocketServerPort"];
private WebSocketServer webSocketServer = null;
public void Start()
{
var log = LogHelper.GetLogger(this.GetType());
// 启动FTP服务器
try
{
var path = HttpContext.Current.Server.MapPath("~/Upload/TestFtpServer");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
var fsProvider = new RemoteFileSystemProvider(path, false);
var membershipProvider = new AnonymousMembershipProvider(new NoValidation());
var ftpServer = new FtpServer(
fsProvider,
membershipProvider,
"127.0.0.1",
int.Parse(ftpPort),
new AssemblyFtpCommandHandlerFactory(typeof(FtpServer).GetTypeInfo().Assembly)
);
ftpServer.Start();
}
catch (Exception ex)
{
log.Error("Create FtpServer failed.", ex);
}
// 启动Websocket服务器
try
{
// see: https://github.com/jjrdk/websocket-sharp
webSocketServer = new WebSocketServer(null, int.Parse(webSocketPort));
webSocketServer.AddWebSocketService("/Socket");
webSocketServer.Start();
}
catch (Exception ex)
{
log.Error("Create websocket server failed.", ex);
}
}
public void Stop()
{
if (ftpServer != null)
{
ftpServer.Stop();
}
try
{
webSocketServer.Stop();
}
catch (Exception ex)
{
var log = LogHelper.GetLogger(this.GetType());
log.Error("Stop websocket server failed.", ex);
}
}
}
}