提交 df6581b7 编写于 作者: JasonWcx's avatar JasonWcx

修改模块载入方法,增加服务器用户组

上级 4d6f4aca
......@@ -25,10 +25,10 @@ namespace Mozi.HttpEmbedded.Auth
{
if (authType.Equals(AuthorizationType.Basic))
{
String userinfo = Base64.From(authBody);
string userinfo = Base64.From(authBody);
var indBnd = userinfo.IndexOf((char) ASCIICode.COLON);
String username = userinfo.Substring(0, indBnd);
String password = userinfo.Substring(indBnd + 1);
string username = userinfo.Substring(0, indBnd);
string password = userinfo.Substring(indBnd + 1);
return IsValidUser(username, password);
}
else
......@@ -46,7 +46,7 @@ namespace Mozi.HttpEmbedded.Auth
/// <returns></returns>
private bool IsValidUser(string userName, string userPassword)
{
return _users.Any(x => x.UserName.Equals(userName) && x.Password.Equals(userPassword));
return _users.Any(x =>x.UserGroup==UserGroup.Admin&& x.UserName.Equals(userName) && x.Password.Equals(userPassword));
}
/// <summary>
/// 设置认证类型
......@@ -69,7 +69,7 @@ namespace Mozi.HttpEmbedded.Auth
var user = _users.Find(x => x.UserName.Equals(userName));
if (user == null)
{
_users.Add(new User() {UserName = userName, Password = userPassword});
_users.Add(new User() {UserName = userName, Password = userPassword,UserGroup=UserGroup.Admin});
}
else
{
......@@ -117,12 +117,12 @@ namespace Mozi.HttpEmbedded.Auth
public string GetChallenge()
{
List<String> clgs=new List<string>();
List<string> clgs=new List<string>();
foreach (var o in Challenge)
{
clgs.Add(String.Format("{0}=\"{1}\"",o.Key,o.Value));
clgs.Add(string.Format("{0}=\"{1}\"",o.Key,o.Value));
}
var clg = String.Format("{0} {1}", this.GetType().Name, String.Join(",", clgs));
var clg = string.Format("{0} {1}", this.GetType().Name, string.Join(",", clgs));
return clg;
}
......
......@@ -21,7 +21,7 @@ namespace Mozi.HttpEmbedded.Auth
public String Name
public string Name
{
get { return _name; }
set { _name = value; }
......@@ -32,7 +32,7 @@ namespace Mozi.HttpEmbedded.Auth
get { return Name; }
}
private AuthorizationType(String name)
private AuthorizationType(string name)
{
_name = name;
}
......
namespace Mozi.HttpEmbedded.Auth
{
/// <summary>
/// 服务器认证用户
/// 服务器用户
/// </summary>
class User
public class User
{
public string UserName { get; set; }
public string Password { get; set; }
public UserGroup UserGroup { get; set; }
}
/// <summary>
/// 用户组
/// </summary>
public enum UserGroup
{
User=0,
Admin=1 //管理组
}
}
......@@ -124,7 +124,7 @@ namespace Mozi.HttpEmbedded.Cookie
public static RequestCookie Parse(string data)
{
RequestCookie hc = new RequestCookie();
String[] kps = data.Split(new string[] {"; "}, StringSplitOptions.RemoveEmptyEntries);
string[] kps = data.Split(new string[] {"; "}, StringSplitOptions.RemoveEmptyEntries);
foreach (var kp in kps)
{
var startIndex = kp.IndexOf((char)ASCIICode.EQUAL);
......
......@@ -7,13 +7,13 @@ namespace Mozi.HttpEmbedded.Encode
/// </summary>
public class Base64
{
public static String To(String data)
public static string To(string data)
{
byte[] infos = StringEncoder.Encode(data);
return Convert.ToBase64String(infos, Base64FormattingOptions.None);
}
public static String From(String data)
public static string From(string data)
{
return StringEncoder.Decode(Convert.FromBase64String(data));
}
......
......@@ -7,7 +7,7 @@ namespace Mozi.HttpEmbedded.Encode
/// </summary>
public static class StringEncoder
{
public static byte[] Encode(String data)
public static byte[] Encode(string data)
{
return System.Text.Encoding.UTF8.GetBytes(data);
}
......
......@@ -12,7 +12,7 @@ namespace Mozi.HttpEmbedded.Encode
' ', '"','#','%','&','(', ')', '+',',','/',':', ';','<','=', '>','?', '@','\\','|'
};
private static readonly String[] To = {
private static readonly string[] To = {
"%20", "%22", "%23", "%25", "%26", "%28", "%29", "%2B", "%2C", "%2F", "%3A", "%3B", "%3C", "%3D", "%3E","%3F", "%40", "%5C", "%7C"
};
/// <summary>
......@@ -20,11 +20,11 @@ namespace Mozi.HttpEmbedded.Encode
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static String DecodeUrl(String data)
public static string DecodeUrl(string data)
{
for (int i = 0; i < To.Length; i++)
{
String s = To[i];
string s = To[i];
while (data.Contains(s))
{
data = data.Replace(s, To[i]);
......@@ -37,7 +37,7 @@ namespace Mozi.HttpEmbedded.Encode
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static String EncodeUrl(String data)
public static string EncodeUrl(string data)
{
for (int i = 0; i < From.Length; i++)
{
......@@ -54,14 +54,14 @@ namespace Mozi.HttpEmbedded.Encode
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static Dictionary<String,String> ParseQuery(String data)
public static Dictionary<string, string> ParseQuery(string data)
{
data = DecodeUrl(data);
Dictionary<String,String> res=new Dictionary<string, string>();
String[] querys = data.Split(new[] { (char)ASCIICode.AND }, StringSplitOptions.RemoveEmptyEntries);
Dictionary<string, string> res=new Dictionary<string, string>();
string[] querys = data.Split(new[] { (char)ASCIICode.AND }, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in querys)
{
String[] kp = item.Split(new[] { (char)ASCIICode.EQUAL }, StringSplitOptions.RemoveEmptyEntries);
string[] kp = item.Split(new[] { (char)ASCIICode.EQUAL }, StringSplitOptions.RemoveEmptyEntries);
res.Add(kp[0], kp[1] ?? "");
}
return res;
......
......@@ -5,7 +5,7 @@ namespace Mozi.HttpEmbedded
{
public class File
{
public String FileName { get; set; }
public string FileName { get; set; }
public int FileIndex { get; set; }
public byte[] FileData { get; set; }
}
......
......@@ -8,7 +8,7 @@ namespace Mozi.HttpEmbedded.Generic
/// </summary>
public abstract class AbsClassEnum
{
protected abstract String Tag { get; }
protected abstract string Tag { get; }
/// <summary>
/// 获取方法
/// </summary>
......@@ -20,7 +20,7 @@ namespace Mozi.HttpEmbedded.Generic
FieldInfo[] pis = typeof(T).GetFields(BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static);
foreach (var info in pis)
{
Object oc=info.GetValue(null);
object oc =info.GetValue(null);
if (oc != null)
{
if (((T)oc).Tag.Equals(name,StringComparison.OrdinalIgnoreCase))
......
......@@ -7,10 +7,10 @@ namespace Mozi.HttpEmbedded
/// </summary>
class HandleError
{
public String Title { get; set; }
public string Title { get; set; }
public DateTime Time { get; set; }
public String Description { get; set; }
public String Remark { get; set; }
public String Source { get; set; }
public string Description { get; set; }
public string Remark { get; set; }
public string Source { get; set; }
}
}
\ No newline at end of file
......@@ -112,17 +112,17 @@ namespace Mozi.HttpEmbedded
//通常在值为“XMLHttpRequest”时使用
// Not standard
public String PropertyTag { get; set; }
public String PropertyValue { get; set; }
public string PropertyTag { get; set; }
public string PropertyValue { get; set; }
protected override String Tag { get { return PropertyTag; } }
protected override string Tag { get { return PropertyTag; } }
private HeaderProperty()
{
}
private HeaderProperty(String tag)
private HeaderProperty(string tag)
{
PropertyTag = tag;
}
......@@ -132,14 +132,14 @@ namespace Mozi.HttpEmbedded
/// <returns></returns>
public override string ToString()
{
return String.Format("{0} {1}", PropertyTag, PropertyValue);
return string.Format("{0} {1}", PropertyTag, PropertyValue);
}
/// <summary>
/// 解析
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static HeaderProperty Parse(String data)
public static HeaderProperty Parse(string data)
{
var tag = data.Substring(0, data.IndexOf((char)ASCIICode.COLON));
var value = data.Substring(data.IndexOf((char) ASCIICode.SPACE) + 1);
......
......@@ -22,32 +22,32 @@ namespace Mozi.HttpEmbedded
/// <summary>
/// 请求路径
/// </summary>
public String Path { get; private set; }
public string Path { get; private set; }
/// <summary>
/// 查询字符串
/// </summary>
public String QueryString { get; private set; }
public string QueryString { get; private set; }
/// <summary>
/// 查询 索引可忽略大小写
/// </summary>
public Dictionary<String, String> Query = new Dictionary<string, string>(new StringCompareIgnoreCase());
public Dictionary<string, string> Query = new Dictionary<string, string>(new StringCompareIgnoreCase());
/// <summary>
/// POST 索引可忽略大小写
/// </summary>
public Dictionary<String, String> Post = new Dictionary<string, string>(new StringCompareIgnoreCase());
public Dictionary<string, string> Post = new Dictionary<string, string>(new StringCompareIgnoreCase());
/// <summary>
/// 可接受压缩算法
/// </summary>
public String AcceptEncoding { get; private set; }
public string AcceptEncoding { get; private set; }
/// <summary>
/// 源地址
/// </summary>
public String Host { get; private set; }
public string Host { get; private set; }
/// <summary>
/// 客户端信息
/// </summary>
public String UserAgent { get; private set; }
public string UserAgent { get; private set; }
/// <summary>
/// 请求方法
/// </summary>
......@@ -55,11 +55,11 @@ namespace Mozi.HttpEmbedded
/// <summary>
/// 内容类型
/// </summary>
public String ContentType { get; private set; }
public string ContentType { get; private set; }
/// <summary>
/// 内容大小
/// </summary>
public String ContentLength { get; private set; }
public string ContentLength { get; private set; }
/// <summary>
/// 请求头
/// </summary>
......@@ -75,7 +75,7 @@ namespace Mozi.HttpEmbedded
/// <summary>
/// 首行字符串
/// </summary>
public String FirstLineString { get; private set; }
public string FirstLineString { get; private set; }
/// <summary>
/// 请求头数据
/// </summary>
......@@ -185,7 +185,7 @@ namespace Mozi.HttpEmbedded
/// <param name="data"></param>
private static void SplitPayload(ref HttpRequest req,byte[] data)
{
String formType = req.Headers.GetValue(HeaderProperty.ContentType.PropertyTag);
string formType = req.Headers.GetValue(HeaderProperty.ContentType.PropertyTag);
if (formType != null)
{
if (formType.Contains("application/x-www-form-urlencoded"))
......@@ -219,9 +219,9 @@ namespace Mozi.HttpEmbedded
/// <param name="data"></param>
private static void SplitPayloadFormData(ref HttpRequest req, byte[] data)
{
String contentType=req.Headers.GetValue(HeaderProperty.ContentType.PropertyTag);
String boundary = "";
String[] values=contentType.Split(new[]{(char)ASCIICode.SEMICOLON}, StringSplitOptions.RemoveEmptyEntries);
string contentType =req.Headers.GetValue(HeaderProperty.ContentType.PropertyTag);
string boundary = "";
string[] values=contentType.Split(new[]{(char)ASCIICode.SEMICOLON}, StringSplitOptions.RemoveEmptyEntries);
//取得分割符号boundary
......@@ -279,8 +279,8 @@ namespace Mozi.HttpEmbedded
File file=new File();
bool isFile = false;
String fieldName = String.Empty;
String fileName = String.Empty;
string fieldName = string.Empty;
string fileName = string.Empty;
while (Array.IndexOf(fragbody, ASCIICode.CR, posCR + 1) > 0)
{
......@@ -296,9 +296,9 @@ namespace Mozi.HttpEmbedded
{
//内容描述信息
//Content-Disposition: form-data; name="fieldNameHere"; filename="fieldName.ext"
String disposition = StringEncoder.Decode(fragement);
String[] headers = disposition.Split(new[] {(char) ASCIICode.SEMICOLON},StringSplitOptions.RemoveEmptyEntries);
string disposition = StringEncoder.Decode(fragement);
string[] headers = disposition.Split(new[] {(char) ASCIICode.SEMICOLON},StringSplitOptions.RemoveEmptyEntries);
fieldName = headers[1].Trim().Replace("name=","").Trim((char)ASCIICode.QUOTE);
if (headers.Length > 2)
......@@ -399,15 +399,15 @@ namespace Mozi.HttpEmbedded
//解析起始行
req.FirstLineData = data;
req.FirstLineString = Encoding.UTF8.GetString(data);
String[] sFirst = req.FirstLineString.Split(new[] { (char)ASCIICode.SPACE }, StringSplitOptions.None);
string[] sFirst = req.FirstLineString.Split(new[] { (char)ASCIICode.SPACE }, StringSplitOptions.None);
//方法 查询 协议
String sMethod = sFirst[0];
String sUrl = sFirst[1];
String sProtocol = sFirst[2];
string sMethod = sFirst[0];
string sUrl = sFirst[1];
string sProtocol = sFirst[2];
RequestMethod rm = AbsClassEnum.Get<RequestMethod>(sMethod);
req.Method = rm;
String[] urls = sUrl.Split(new[] { (char)ASCIICode.QUESTION }, StringSplitOptions.RemoveEmptyEntries);
string[] urls = sUrl.Split(new[] { (char)ASCIICode.QUESTION }, StringSplitOptions.RemoveEmptyEntries);
req.Path = urls[0];
if (urls.Length > 1)
{
......@@ -415,8 +415,8 @@ namespace Mozi.HttpEmbedded
req.Query = UrlEncoder.ParseQuery(urls[1]);
}
String sProtoType = sProtocol.Substring(0, sProtocol.IndexOf((char)ASCIICode.DIVIDE));
String sProtoVersion = sProtocol.Substring(sProtocol.IndexOf((char)ASCIICode.DIVIDE) + 1);
string sProtoType = sProtocol.Substring(0, sProtocol.IndexOf((char)ASCIICode.DIVIDE));
string sProtoVersion = sProtocol.Substring(sProtocol.IndexOf((char)ASCIICode.DIVIDE) + 1);
req.Protocol = AbsClassEnum.Get<ProtocolType>(sProtoType);
req.ProtocolVersion = AbsClassEnum.Get<HttpVersion>(sProtoVersion);
}
......
......@@ -22,7 +22,7 @@ namespace Mozi.HttpEmbedded
public int ContengLength = 0;
public String Server = "";
public string Server = "";
/// <summary>
/// 请求头
......@@ -31,7 +31,7 @@ namespace Mozi.HttpEmbedded
/// <summary>
/// 压缩类型
/// </summary>
public String ContentEncoding { get; set; }
public string ContentEncoding { get; set; }
/// <summary>
/// 请求数据体
/// </summary>
......@@ -68,7 +68,7 @@ namespace Mozi.HttpEmbedded
/// </summary>
/// <param name="head"></param>
/// <returns></returns>
public HttpResponse AddHeader(HeaderProperty head,String value)
public HttpResponse AddHeader(HeaderProperty head, string value)
{
Headers.Add(head,value);
return this;
......@@ -79,7 +79,7 @@ namespace Mozi.HttpEmbedded
/// <param name="item"></param>
/// <param name="value"></param>
/// <returns></returns>
public HttpResponse AddHeader(String item,String value)
public HttpResponse AddHeader(string item, string value)
{
Headers.Add(item,value);
return this;
......@@ -106,7 +106,7 @@ namespace Mozi.HttpEmbedded
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public HttpResponse Write(String data)
public HttpResponse Write(string data)
{
Write(StringEncoder.Encode(data));
return this;
......@@ -144,7 +144,7 @@ namespace Mozi.HttpEmbedded
/// <returns></returns>
public byte[] GetStatusLine()
{
return StringEncoder.Encode(String.Format("HTTP/{0} {1} {2}", ProxyVersion.Version, Status.Code, Status.Text));
return StringEncoder.Encode(string.Format("HTTP/{0} {1} {2}", ProxyVersion.Version, Status.Code, Status.Text));
}
/// <summary>
/// 重定向302
......
......@@ -49,24 +49,19 @@ namespace Mozi.HttpEmbedded
/// <summary>
/// 时区
/// </summary>
public String Timezone { get; set; }
public string Timezone { get; set; }
/// <summary>
/// 编码格式
/// </summary>
public String Encoding { get; set; }
public string Encoding { get; set; }
/// <summary>
/// 服务器名称
/// </summary>
public String ServerName
public string ServerName
{
get { return _serverName; }
private set { _serverName = value; }
}
/// <summary>
/// 服务器用户
/// </summary>
private List<User> _users=new List<User>();
public HttpServer()
{
Auth=new Authenticator();
......@@ -131,13 +126,13 @@ namespace Mozi.HttpEmbedded
private StatusCode HandleAuth(ref HttpContext context)
{
var authorization = context.Request.Headers.GetValue(HeaderProperty.Authorization.PropertyTag);
if (!String.IsNullOrEmpty(authorization) && Auth.Check(authorization))
if (!string.IsNullOrEmpty(authorization) && Auth.Check(authorization))
{
return HandleRequest(ref context);
}
else
{
context.Response.AddHeader(HeaderProperty.WWWAuthenticate, String.Format("{0} realm=\"{1}\"", Auth.AuthType.Name,AuthorizationType.REALM));
context.Response.AddHeader(HeaderProperty.WWWAuthenticate, string.Format("{0} realm=\"{1}\"", Auth.AuthType.Name,AuthorizationType.REALM));
return StatusCode.Unauthorized;
}
}
......@@ -264,12 +259,12 @@ namespace Mozi.HttpEmbedded
}
/// <summary>
/// 设置服务器认证用户
/// <para>如果<see cref="F:EnableAuth"/>=<see cref="Boolean.False"/>,此设置就没有意义</para>
/// <para>如果<see cref="F:EnableAuth"/>=<see cref="bool.False"/>,此设置就没有意义</para>
/// </summary>
/// <param name="userName"></param>
/// <param name="userPassword"></param>
/// <returns></returns>
public HttpServer SetUser(String userName, String userPassword)
public HttpServer SetUser(string userName, string userPassword)
{
Auth.SetUser(userName, userName);
return this;
......@@ -300,7 +295,7 @@ namespace Mozi.HttpEmbedded
/// </summary>
/// <param name="page"></param>
/// <returns></returns>
public HttpServer UseErrorPage(String page)
public HttpServer UseErrorPage(string page)
{
throw new NotImplementedException();
}
......
......@@ -14,9 +14,9 @@ namespace Mozi.HttpEmbedded
public static readonly HttpVersion Version12 = new HttpVersion("1.2");
public static readonly HttpVersion Version20 = new HttpVersion("2.0");
public String Version { get { return _vervalue; } }
public string Version { get { return _vervalue; } }
protected override String Tag { get { return Version; } }
protected override string Tag { get { return Version; } }
private string _vervalue = "";
......@@ -28,9 +28,9 @@ namespace Mozi.HttpEmbedded
/// 重写ToString方法
/// </summary>
/// <returns></returns>
public override String ToString()
public override string ToString()
{
return String.Format("HTTP/{0}", _vervalue);
return string.Format("HTTP/{0}", _vervalue);
}
}
}
\ No newline at end of file
......@@ -25,26 +25,37 @@ namespace Mozi.HttpEmbedded.Page
private Router()
{
LoadInternalApi();
}
/// <summary>
/// 调起
/// 从程序集载入接口
/// </summary>
/// <param name="ctx"></param>
internal object Invoke(HttpContext ctx)
/// <param name="ass"></param>
private void LoadApiFromAssembly(Assembly ass)
{
Assembly ass = Assembly.GetExecutingAssembly();
Type[] types = ass.GetExportedTypes();
foreach (var type in types)
{
if (type.IsSubclassOf(typeof(BaseApi)))
{
apis.Add(type);
apis.Add(type);
}
}
ass.GetModules();
}
/// <summary>
/// 载入内部接口
/// </summary>
private void LoadInternalApi()
{
Assembly ass = Assembly.GetExecutingAssembly();
LoadApiFromAssembly(ass);
}
/// <summary>
/// 调起
/// </summary>
/// <param name="ctx"></param>
internal object Invoke(HttpContext ctx)
{
string path = ctx.Request.Path;
//确定路径映射关系
AccessPoint ap=Match(path);
......@@ -73,14 +84,15 @@ namespace Mozi.HttpEmbedded.Page
return method.Invoke(instance, BindingFlags.IgnoreCase, null, args, CultureInfo.CurrentCulture);
//调起相关方法
}
/// <summary>
/// 载入模块
/// </summary>
/// <returns></returns>
public Router Register(string filePath)
{
throw new NotImplementedException();
Assembly ass = Assembly.LoadFrom(filePath);
LoadApiFromAssembly(ass);
return this;
}
/// <summary>
/// 路由注入
......@@ -112,7 +124,6 @@ namespace Mozi.HttpEmbedded.Page
_mappers.Add(new RouteMapper(){Pattern = pattern});
return this;
}
public AccessPoint Match(string path)
{
foreach (var mapper in _mappers)
......@@ -148,7 +159,7 @@ namespace Mozi.HttpEmbedded.Page
private string Prefix { get; set; }
private string Suffix { get; set; }
private String Link { get; set; }
private string Link { get; set; }
private string IdName { get; set; }
private Regex Matcher { get; set; }
......@@ -171,7 +182,7 @@ namespace Mozi.HttpEmbedded.Page
Prefix = pattern.Substring(0, indCrl);
Link = pattern.Substring(indCrl + 12, indID - indCrl - 12);
Suffix = "";
Matcher = new Regex(String.Format("{0}[a-zA-Z]\\w+{1}[a-zA-Z]\\w+{2}", Regex.Escape(Prefix), Regex.Escape(Link), Regex.Escape(Suffix)), RegexOptions.IgnoreCase);
Matcher = new Regex(string.Format("{0}[a-zA-Z]\\w+{1}[a-zA-Z]\\w+{2}", Regex.Escape(Prefix), Regex.Escape(Link), Regex.Escape(Suffix)), RegexOptions.IgnoreCase);
}
/// <summary>
/// 判断是否匹配路由
......@@ -210,8 +221,8 @@ namespace Mozi.HttpEmbedded.Page
public class AccessPoint
{
public String Domain { get; set; }
public String Method { get; set; }
public string Domain { get; set; }
public string Method { get; set; }
}
}
}
......@@ -15,15 +15,13 @@ namespace Mozi.HttpEmbedded.Page
{
return "Welcome to Mozi.HttpEnbedded";
}
/// <summary>
/// 取时间
/// </summary>
/// <returns></returns>
public string GetTime()
{
//public string Hello(string greet)
//{
// return String.Format("you say {0}", greet);
//}
}
public class Test2 : Test
{
}
}
}
......@@ -13,15 +13,15 @@ namespace Mozi.HttpEmbedded
private string _proxy;
public String Proxy
public string Proxy
{
get { return _proxy; }
set { _proxy = value; }
}
protected override String Tag { get { return Proxy; } }
protected override string Tag { get { return Proxy; } }
private ProtocolType(String typeName)
private ProtocolType(string typeName)
{
_proxy = typeName;
}
......
......@@ -83,17 +83,17 @@ namespace Mozi.HttpEmbedded
/// <summary>
/// 方法名
/// </summary>
public String Name
public string Name
{
get { return _name; }
set { _name = value; }
}
protected override String Tag { get { return Name; } }
protected override string Tag { get { return Name; } }
private string _name;
private RequestMethod(String name)
private RequestMethod(string name)
{
_name = name;
}
......
......@@ -36,7 +36,7 @@ namespace Mozi.HttpEmbedded
public class DataTransferArgs:EventArgs
{
public byte[] Data { get; set; }
public String IP { get; set; }
public string IP { get; set; }
public int Port { get; set; }
public Socket Socket { get; set; }
......
......@@ -13,7 +13,7 @@ namespace Mozi.HttpEmbedded
//private static SocketServer _mSocketServer;
private int _iPort = 9000;
private Dictionary<string,Socket> _socketDocker;
private Socket sc;
private Socket _sc;
/// <summary>
/// 服务器启动事件
/// </summary>
......@@ -22,6 +22,9 @@ namespace Mozi.HttpEmbedded
/// 客户端连接事件
/// </summary>
public event ClientConnect OnClientConnect;
/// <summary>
/// 客户端断开连接时间
/// </summary>
public event ClientDisConnect AfterClientDisConnect;
/// <summary>
/// 数据接收开始事件
......@@ -46,7 +49,7 @@ namespace Mozi.HttpEmbedded
public Socket SocketMain
{
get { return sc; }
get { return _sc; }
}
public SocketServer()
......@@ -54,7 +57,6 @@ namespace Mozi.HttpEmbedded
_socketDocker = new Dictionary<string, Socket>();
}
//TODO 测试此处是否有BUG
/// <summary>
/// 启动服务器
......@@ -63,23 +65,23 @@ namespace Mozi.HttpEmbedded
public void StartServer(int port)
{
_iPort = port;
if (sc == null)
if (_sc == null)
{
sc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
_sc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
}
else
{
sc.Close();
_sc.Close();
}
System.Net.IPEndPoint endpoint = new System.Net.IPEndPoint(System.Net.IPAddress.Any, _iPort);
sc.Bind(endpoint);
sc.Listen(_iPort);
_sc.Bind(endpoint);
_sc.Listen(_iPort);
//回调服务器启动事件
if (OnServerStart != null)
{
OnServerStart(this, new ServerArgs() { StartTime=DateTime.Now,StopTime=DateTime.MinValue });
}
sc.BeginAccept(new AsyncCallback(CallbackAccept), sc);
_sc.BeginAccept(new AsyncCallback(CallbackAccept), _sc);
}
/// <summary>
/// 关闭服务器
......@@ -89,10 +91,10 @@ namespace Mozi.HttpEmbedded
_socketDocker.Clear();
try
{
sc.Shutdown(SocketShutdown.Both);
_sc.Shutdown(SocketShutdown.Both);
if (AfterServerStop != null)
{
AfterServerStop(sc, null);
AfterServerStop(_sc, null);
}
}
catch
......@@ -153,13 +155,10 @@ namespace Mozi.HttpEmbedded
{
//置空数据连接
so.ResetBuffer(iByteRead);
if (client.Available > 0)
{
if (client.Available > 0){
//Thread.Sleep(10);
client.BeginReceive(so.Buffer, 0, StateObject.BufferSize, 0, CallbackReceive, so);
}
else
{
}else{
_socketDocker.Remove(so.Id);
if (AfterReceiveEnd != null)
{
......
......@@ -451,7 +451,7 @@ namespace Mozi.HttpEmbedded.Source
/// <returns></returns>
public static string GetContentType(string ext)
{
if (String.IsNullOrEmpty(ext)||!Types.ContainsKey(ext))
if (string.IsNullOrEmpty(ext)||!Types.ContainsKey(ext))
{
return "text/html";
}
......
......@@ -68,13 +68,13 @@ namespace Mozi.HttpEmbedded.Source
/// </summary>
/// <param name="path"></param>
/// <param name="ifModifiedSince"></param>
/// <returns><see cref="Boolean:true">Modified</see></returns>
/// <returns><see cref="bool:true">Modified</see></returns>
public bool CheckIfModified(string path, string ifModifiedSince)
{
DateTime dtModified=System.IO.File.GetLastWriteTime(_root + "\\" + path);
try
{
if (!String.IsNullOrEmpty(ifModifiedSince))
if (!string.IsNullOrEmpty(ifModifiedSince))
{
DateTime dtSince = DateTime.ParseExact(ifModifiedSince, "ddd, dd MMM yyyy HH:mm:ss GMT",
CultureInfo.InvariantCulture,
......
......@@ -11,14 +11,14 @@ namespace Mozi.HttpEmbedded
/// </summary>
class StateObject
{
public String Id {get;set;} //连接标识符
public string Id {get;set;} //连接标识符
public Socket WorkSocket = null;
public int RemotePort = 0;
public static int BufferSize = 1024;
public List<byte> Data=new List<byte>();
public byte[] Buffer = new byte[BufferSize*2];
public StringBuilder sb = new StringBuilder();
public String IP { get; set; }
public string IP { get; set; }
//TODO 此处没有完整处理包体,会有多读取的冗余数据
public void ResetBuffer(int count)
......
......@@ -282,9 +282,9 @@ namespace Mozi.HttpEmbedded
/// </summary>
public int Code{get { return _code; }}
public String Text{get { return _text; }}
public string Text {get { return _text; }}
private StatusCode(int code, String desc)
private StatusCode(int code, string desc)
{
_code = code;
_text = desc;
......
......@@ -43,7 +43,7 @@ namespace Mozi.HttpEmbedded
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public TransformHeader Add(String key, String value)
public TransformHeader Add(string key, string value)
{
if (HeaderData.ContainsKey(key))
{
......@@ -60,7 +60,7 @@ namespace Mozi.HttpEmbedded
/// </summary>
/// <param name="header"></param>
/// <returns></returns>
public TransformHeader Add(HeaderProperty header,String value)
public TransformHeader Add(HeaderProperty header, string value)
{
Add(header.PropertyTag,value);
return this;
......@@ -74,7 +74,7 @@ namespace Mozi.HttpEmbedded
List<byte> buffer=new List<byte>();
foreach (var item in HeaderData)
{
buffer.AddRange(Encoding.UTF8.GetBytes(String.Format("{0}: {1}",item.Key,item.Value)));
buffer.AddRange(Encoding.UTF8.GetBytes(string.Format("{0}: {1}",item.Key,item.Value)));
buffer.AddRange(Carriage);
}
return buffer.ToArray();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册