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

No commit message

No commit message
上级 dac7a0e3
......@@ -107,7 +107,7 @@ namespace Mozi.HttpEmbedded.Test
sr.USN = service.USN;
sr.ST = pack.ST;
sr.Server = service.Server;
//service.EchoSearch(sr);
service.EchoSearch(sr);
}
private static void Ssdp_OnNotifyAliveReceived(object sender, SSDP.AlivePackage pack,string host)
......
......@@ -59,8 +59,21 @@ Mozi.HttpEmbedded在Socket之上使用异步单线程模型,构建了一个HTTP
支持GZip,Deflate算法
8. 字符编码
字符编码使用UTF-8
字符编码使用UTF-8
## 项目地址
- [Github][github]
- [Gitee][gitee]
- [CSDN][codechina]
## 程序下载
~~~shell
dotnet add package Mozi.HttpEmbedded --version 1.2.5
~~~
## 功能与版本迭代
不定期对Mozi.HttpEmbedded的功能进行完善,解决各种BUG。HTTP标准功能繁多,需要一步步实现。
......@@ -90,7 +103,6 @@ Mozi.HttpEmbedded在Socket之上使用异步单线程模型,构建了一个HTTP
hs.SetVirtualDirectory("config", AppDomain.CurrentDomain.BaseDirectory + @"Config\");
Router router = Router.Default;
//注入API
//1,此方法会扫描程序集内继承自BaseApi或属性标记为[BasicApi]的类
//2,Http通讯数据标准默认为xml,使用Router.Default.SetDataSerializer(ISerializer ser)更改序列化类型
......@@ -106,4 +118,7 @@ Mozi.HttpEmbedded在Socket之上使用异步单线程模型,构建了一个HTTP
### By [Jason][1] on Feb. 5,2020
[1]:mailto:brotherqian@163.com
\ No newline at end of file
[1]:mailto:brotherqian@163.com
[gitee]:https://gitee.com/myui_admin/mozi.git
[github]:https://github.com/MoziCoder/Mozi.HttpEmbedded.git
[codechina]:https://codechina.csdn.net/mozi/mozi.httpembedded.git
\ No newline at end of file
......@@ -71,7 +71,7 @@ namespace Mozi.SSDP
headers.Add("MAN", "\"" + SSDPType.Discover.ToString() + "\"");
headers.Add("ST", ST.ToString());
headers.Add("CACHE-CONTROL", $"max-age = {CacheTimeout}");
headers.Add("DATE", DateTime.UtcNow.ToString("r"));
//headers.Add("DATE", DateTime.UtcNow.ToString("r"));
headers.Add("EXT", "");
headers.Add("LOCATION", Location);
headers.Add("SERVER", Server);
......@@ -142,7 +142,7 @@ namespace Mozi.SSDP
public static SearchPackage Parse(HttpRequest req)
{
SearchPackage pack = new SearchPackage();
var sHost = req.Headers.GetValue("HOST");
var sHost = req.Headers.GetValue("HOST")??req.Headers.GetValue("Host");
pack.HOST = sHost;
//IPV4
string[] hostItmes = sHost.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
......@@ -183,7 +183,7 @@ namespace Mozi.SSDP
public static ByebyePackage Parse(HttpRequest req)
{
ByebyePackage pack = new ByebyePackage();
var sHost = req.Headers.GetValue("HOST");
var sHost = req.Headers.GetValue("HOST") ?? req.Headers.GetValue("Host");
pack.HOST = sHost;
//IPV4
string[] hostItmes = sHost.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
......@@ -221,7 +221,7 @@ namespace Mozi.SSDP
public new static UpdatePackage Parse(HttpRequest req)
{
UpdatePackage pack = new UpdatePackage();
var sHost = req.Headers.GetValue("HOST");
var sHost = req.Headers.GetValue("HOST") ?? req.Headers.GetValue("Host");
pack.HOST = sHost;
//IPV4
string[] hostItmes = sHost.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
......
......@@ -165,6 +165,11 @@ namespace Mozi.SSDP
{
};
/// <summary>
/// 搜索程序定义的默认类型
/// urn:{domain}:device:1
/// </summary>
public TargetDesc DeviceDefault = new TargetDesc();
public event NotifyAliveReceived OnNotifyAliveReceived;
public event NotifyByebyeReceived OnNotifyByebyeReceived;
......@@ -195,6 +200,9 @@ namespace Mozi.SSDP
PackDefaultByebye.USN = new USNDesc() { IsRootDevice = true, DeviceId = UUID.Generate(),Domain="mozi.org" };
DeviceDefault.Domain = Domain;
DeviceDefault.ServiceType = ServiceCategory.Device;
DeviceDefault.Version = 1;
}
/// <summary>
/// 数据接收时间
......@@ -203,12 +211,14 @@ namespace Mozi.SSDP
/// <param name="args"></param>
private void _socket_AfterReceiveEnd(object sender, DataTransferArgs args)
{
//TODO 如何进行多包分割?
ParsePackage(args);
if (OnMessageReceived != null)
{
OnMessageReceived(this, args);
}
Console.WriteLine("*********收到数据[{0}]*********\r\n{1}\r\n*******END********", args.IP,System.Text.Encoding.UTF8.GetString(args.Data));
Console.WriteLine("{1}", args.IP,System.Text.Encoding.UTF8.GetString(args.Data));
}
/// <summary>
/// 包解析
......@@ -346,6 +356,7 @@ namespace Mozi.SSDP
/// <summary>
/// 发送查询消息
/// </summary>
/// <param name="pk"></param>
public void Search(SearchPackage pk)
{
HttpRequest request = new HttpRequest();
......@@ -354,7 +365,23 @@ namespace Mozi.SSDP
byte[] data = request.GetBuffer();
_socket.SocketMain.SendTo(data, _remoteEP);
}
/// <summary>
/// 查找设备简化方法,参看<see cref="Search(SearchPackage)"/>
/// </summary>
/// <param name="desc"></param>
public void Search(TargetDesc desc)
{
SearchPackage pk = new SearchPackage();
pk.MX = 1;
pk.UserAgent = _server;
pk.ST = desc;
HttpRequest request = new HttpRequest();
request.SetPath("*").SetMethod(RequestMethodUPnP.MSEARCH);
request.SetHeaders(pk.GetHeaders());
byte[] data = request.GetBuffer();
_socket.SocketMain.SendTo(data, _remoteEP);
}
//NOTIFY * HTTP/1.1
//HOST: 239.255.255.250:1900
//CACHE-CONTROL: max-age = {seconds}
......@@ -412,6 +439,10 @@ namespace Mozi.SSDP
byte[] data = request.GetBuffer();
_socket.SocketMain.SendTo(data, _remoteEP);
}
/// <summary>
/// update信息
/// </summary>
/// <param name="pk"></param>
public void NotifyUpdate(UpdatePackage pk)
{
HttpRequest request = new HttpRequest();
......@@ -443,6 +474,7 @@ namespace Mozi.SSDP
/// <summary>
/// 响应 MS-SEARCH 查找
/// </summary>
/// <param name="pk"></param>
public void EchoSearch(SearchResponsePackage pk)
{
HttpResponse resp = new HttpResponse();
......@@ -466,6 +498,10 @@ namespace Mozi.SSDP
// </u:actionName>
// </s:Body>
//</s:Envelope>
/// <summary>
/// 控制信息
/// </summary>
/// <param name="pk"></param>
internal void ControlAction(ControlActionPackage pk)
{
HttpRequest request = new HttpRequest();
......@@ -523,7 +559,10 @@ namespace Mozi.SSDP
//</e:property>
//Other variable names and values(if any) go here.
//</e:propertyset>
/// <summary>
/// 订阅
/// </summary>
/// <param name="pk"></param>
internal void Subscribe(SubscribePackage pk)
{
HttpRequest request = new HttpRequest();
......@@ -536,7 +575,10 @@ namespace Mozi.SSDP
//UNSUBSCRIBE publisher path HTTP/1.1
//HOST: publisher host:publisher port
//SID: uuid:subscription UUID
/// <summary>
/// 取消订阅
/// </summary>
/// <param name="pk"></param>
internal void UnSubscribe(SubscribePackage pk)
{
HttpRequest request = new HttpRequest();
......@@ -757,7 +799,11 @@ namespace Mozi.SSDP
}
return result;
}
/// <summary>
/// 包解析
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static USNDesc Parse(string data)
{
//uuid:device-UUID::urn:domain-name:service:serviceType:v
......
......@@ -2,7 +2,7 @@
## 项目介绍
Mozi.HttpEmbedded是一个基于.Net构建的嵌入式Web服务器,为.Net App提供web服务功能。
Mozi.HttpEmbedded是一个基于.Net构建的嵌入式HTTP服务器,为.Net App提供web服务功能。
> 嵌入式的目标不是单片机,而是.Net应用程序。
> 此项目并不会实现非常丰富的大型Web服务器功能
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册