Skip to content

Commit

Permalink
Squashed 'src/Senparc.WebSocket/' changes from 7304f4f68..c1a02d9d8
Browse files Browse the repository at this point in the history
c1a02d9d8 更新.NET 4.5项目版本号
67432b37c Merge branch 'Developer' of https://github.com/JeffreySu/WeiXinMPSDK into Developer
efd069c2d 升级WebSocket的Newtonsoft.Json版本
477ea842c modify
7965cc316 WebSocket 0.3.4 升级Newtonsoft.Json版本
4a53f15cb WebSocket 0.3.4 升级Newtonsoft.Json版本 (编译通过)
9d68c67a9 修改
aa75380a3 升级Senparc.WebSocket的NewtonSoft.Json引用(编译未通过)
c1a0ed5a4 升级第三方Nuget包
938a32cb7 发布Nuget新版本
422fa8e4b 整理csproj项目文件和解决方案,VS2017对全版本可通过编译
519957d76 modify
e1d26d478 继续合并Developer_FullVersion
befebfe6b 成功从Developer_FullVersion分支合并(.NET 4.5 Sample跑通)
64a5973c0 成功从Developer_FullVersion分支合并(.NET 4.5 Sample跑通)
2064b430d 发布新版本Nuget
579eeae20 发布新版本Nuget
c86e0ed43 合并Developer分支最新代码
112171cec 发布Nuget
9d8e45873 修改WebSocket
0f35df501 合并Developer分支代码,解决冲突
6a4173e29 增加发布版本号
f327d7946 modify
e76263b46 merge from Developer branch
0bae74d58 重命名csproj
bff2af9b5 更改旧版本项目文件名称
8c1ced68d 修改WebSocket
f726edb4c 调整WebSocket目录
297631e7e 添加原始csproj文件的条件编译
179a5ebd1 移除net461版本(MvcExtension的Core版本有保留) JeffreySu#535
b769f97e3 完成WebSocket移植
f1d58fbc8 .NET Core WebSocket移植成功 JeffreySu#535
5589124ff .NET Core WebSocket移植成功
6cbb67f4e 添加CoreWebsocket项目(临时)

git-subtree-dir: src/Senparc.WebSocket
git-subtree-split: c1a02d9d8648df5ae49e250ee943be937cb2f23e
  • Loading branch information
JeffreySu committed Jan 21, 2018
1 parent 46d3250 commit a5611de
Show file tree
Hide file tree
Showing 16 changed files with 309 additions and 266 deletions.
22 changes: 0 additions & 22 deletions src/Senparc.WebSocket/Senparc.WebSocket.sln

This file was deleted.

20 changes: 15 additions & 5 deletions src/Senparc.WebSocket/Senparc.WebSocket/Helpers/WebSocketHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,13 @@
using System.Text;
using System.Threading;
using System.Threading.Tasks;

#if NET45
using System.Web.Routing;
using System.Web.WebSockets;
#else
using Microsoft.AspNetCore.Http;
#endif

namespace Senparc.WebSocket
{
Expand All @@ -26,20 +31,25 @@ namespace Senparc.WebSocket
/// </summary>
public class WebSocketHelper
{
private readonly AspNetWebSocketContext _webSocketContext;
//private readonly AspNetWebSocketContext _webSocketContext;
private readonly System.Net.WebSockets.WebSocket _webSocket;
private readonly CancellationToken _cancellationToken;


/// <summary>
/// WebSocketHelper
/// </summary>
/// <param name="webSocketContext"></param>
///// <param name="webSocketContext"></param>
/// <param name="cancellationToken"></param>
public WebSocketHelper(AspNetWebSocketContext webSocketContext, CancellationToken cancellationToken)
#if NET45
public WebSocketHelper(System.Net.WebSockets.WebSocket socket,/*AspNetWebSocketContext webSocketContext,*/ CancellationToken cancellationToken)
#else
public WebSocketHelper(System.Net.WebSockets.WebSocket socket,/*AspNetWebSocketContext webSocketContext,*/ CancellationToken cancellationToken)
#endif
{
_webSocketContext = webSocketContext;
_webSocket = webSocketContext.WebSocket;
//_webSocketContext = webSocketContext;
//_webSocket = webSocketContext.WebSocket;
_webSocket = socket;
_cancellationToken = cancellationToken;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.WebSockets;

namespace Senparc.WebSocket
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("Senparc.WebSocket")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Senparc.WebSocket")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//[assembly: AssemblyTitle("Senparc.WebSocket")]
//[assembly: AssemblyDescription("")]
//[assembly: AssemblyConfiguration("")]
//[assembly: AssemblyCompany("")]
//[assembly: AssemblyProduct("Senparc.WebSocket")]
//[assembly: AssemblyCopyright("Copyright © 2017")]
//[assembly: AssemblyTrademark("")]
//[assembly: AssemblyCulture("")]

//将 ComVisible 设置为 false 将使此程序集中的类型
//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
Expand All @@ -32,5 +32,5 @@
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.3.2.*")]
[assembly: AssemblyVersion("0.3.3.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
Original file line number Diff line number Diff line change
@@ -1,62 +1,26 @@
/*----------------------------------------------------------------
Copyright (C) 2017 Senparc
文件名:WebSocketHandler.cs
文件功能描述:WebSocket处理程序
创建标识:Senparc - 20170126
----------------------------------------------------------------*/

using System;
using System.Collections.Generic;
using System;
using System.Linq;
using System.Net.WebSockets;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Net.WebSockets;
using System.Threading.Tasks;
using System.Web;
using System.Web.Routing;
using System.Web.WebSockets;

#if NET45
using System.Web.Script.Serialization;
#else
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
#endif

namespace Senparc.WebSocket
{
/// <summary>
/// WebSocket处理程序
/// </summary>
public class WebSocketHandler : IHttpHandler
public partial class WebSocketHandler
{
private RequestContext _requestContext;
public WebSocketHandler(RequestContext context)
{
_requestContext = context;
ProcessRequest(context);
}

private static void ProcessRequest(RequestContext requestContext)
{
//context.Response.ContentType = "text/plain";
//context.Response.Write("Hello World");

//Checks if the query is WebSocket request.
var context = requestContext.HttpContext;
if (context.IsWebSocketRequest)
{
//If yes, we attach the asynchronous handler.
context.AcceptWebSocketRequest(WebSocketRequestHandler);
}
}

/// <summary>
/// 部分Handler过程参考:http://www.cnblogs.com/lookbs/p/MVC-IMG.html
/// </summary>
/// <param name="webSocketContext"></param>
/// <returns></returns>
public static async Task WebSocketRequestHandler(AspNetWebSocketContext webSocketContext)
private static async Task HandleMessage(System.Net.WebSockets.WebSocket webSocket)
{
//Gets the current WebSocket object.
System.Net.WebSockets.WebSocket webSocket = webSocketContext.WebSocket;

/*We define a certain constant which will represent
size of received data. It is established by us and
we can set any value. We know that in this case the size of the sent
Expand All @@ -70,20 +34,16 @@ public static async Task WebSocketRequestHandler(AspNetWebSocketContext webSocke
var cancellationToken = new CancellationToken();


WebSocketHelper webSocketHandler = new WebSocketHelper(webSocketContext, cancellationToken);
WebSocketHelper webSocketHandler = new WebSocketHelper(webSocket, /*webSocketContext, */cancellationToken);
var messageHandler = WebSocketConfig.WebSocketMessageHandlerFunc.Invoke();

if (webSocket.State == WebSocketState.Connecting)
{
if (WebSocketConfig.WebSocketMessageHandlerFunc != null)
{
await messageHandler.OnConnecting(webSocketHandler);//调用MessageHandler
}
}

//Checks WebSocket state.
while (webSocket.State == WebSocketState.Open)
{
//var incoming = await this._socket.ReceiveAsync(seg, CancellationToken.None);
//var outgoing = new ArraySegment<byte>(buffer, 0, incoming.Count);
//await this._socket.SendAsync(outgoing, WebSocketMessageType.Text, true, CancellationToken.None);


//Reads data.
WebSocketReceiveResult webSocketReceiveResult =
await webSocket.ReceiveAsync(receivedDataBuffer, cancellationToken);
Expand Down Expand Up @@ -122,8 +82,15 @@ public static async Task WebSocketRequestHandler(AspNetWebSocketContext webSocke
Message = receiveString// + " | 系统错误:" + e.Message
};


#if NET45
JavaScriptSerializer js = new JavaScriptSerializer();
receivedMessage = js.Deserialize<ReceivedMessage>(receiveString);
#else
receivedMessage = Newtonsoft.Json.JsonConvert.DeserializeObject<ReceivedMessage>(receiveString);
#endif


}
catch (Exception e)
{
Expand All @@ -142,15 +109,5 @@ public static async Task WebSocketRequestHandler(AspNetWebSocketContext webSocke
}
}
}

public void ProcessRequest(HttpContext context)
{

}

public bool IsReusable
{
get { return true; }
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Net.WebSockets;
using System.Threading.Tasks;
using System.Threading;

#if NET45

#else
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.WebSockets;
#endif


namespace Senparc.WebSocket
{

#if !NET45
public partial class WebSocketHandler
{
public const int BufferSize = 4096;
System.Net.WebSockets.WebSocket _socket;

WebSocketHandler(System.Net.WebSockets.WebSocket socket)
{
this._socket = socket;
}

async Task EchoLoop()
{
await HandleMessage(_socket);
}

static async Task Acceptor(HttpContext hc, Func<Task> n)
{
if (!hc.WebSockets.IsWebSocketRequest)
return;
var socket = await hc.WebSockets.AcceptWebSocketAsync();
var h = new WebSocketHandler(socket);
await h.EchoLoop();
}
/// <summary>
/// branches the request pipeline for this SocketHandler usage
/// </summary>
/// <param name="app"></param>
public static void Map(IApplicationBuilder app)
{
app.UseWebSockets();
app.Use(WebSocketHandler.Acceptor);
}
}
#endif
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,25 @@
using System.Text;
using System.Threading;
using System.Threading.Tasks;


//using Microsoft.AspNetCore.Http;
//using Microsoft.AspNetCore.Routing;
//using Microsoft.AspNetCore.WebSockets;

#if NET45
using System.Web;
using System.Web.Routing;
using System.Web.WebSockets;
#endif

namespace Senparc.WebSocket
{
#if NET45
/// <summary>
/// WebSocket处理程序
/// </summary>
public class WebSocketHandler : IHttpHandler
public partial class WebSocketHandler : IHttpHandler
{
private RequestContext _requestContext;
public WebSocketHandler(RequestContext context)
Expand Down Expand Up @@ -70,7 +79,7 @@ public static async Task WebSocketRequestHandler(AspNetWebSocketContext webSocke
var cancellationToken = new CancellationToken();


WebSocketHelper webSocketHandler = new WebSocketHelper(webSocketContext, cancellationToken);
WebSocketHelper webSocketHandler = new WebSocketHelper(webSocket, cancellationToken);
var messageHandler = WebSocketConfig.WebSocketMessageHandlerFunc.Invoke();

if (webSocket.State == WebSocketState.Connecting)
Expand All @@ -82,48 +91,18 @@ public static async Task WebSocketRequestHandler(AspNetWebSocketContext webSocke
}

//Checks WebSocket state.
while (webSocket.State == WebSocketState.Open)
{
//Reads data.
WebSocketReceiveResult webSocketReceiveResult =
await webSocket.ReceiveAsync(receivedDataBuffer, cancellationToken);

//If input frame is cancelation frame, send close command.
if (webSocketReceiveResult.MessageType == WebSocketMessageType.Close)
{
if (WebSocketConfig.WebSocketMessageHandlerFunc != null)
{
await messageHandler.OnDisConnected(webSocketHandler);//调用MessageHandler
}

await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure,
String.Empty, cancellationToken);
}
else
{
byte[] payloadData = receivedDataBuffer.Array
.Where(b => b != 0)
.Take(webSocketReceiveResult.Count)
.ToArray();

if (WebSocketConfig.WebSocketMessageHandlerFunc != null)
{
//Because we know that is a string, we convert it.
string receiveString =
//System.Text.Encoding.UTF8.GetString(payloadData, 0, payloadData.Length);
System.Text.Encoding.UTF8.GetString(payloadData, 0, payloadData.Length);

await messageHandler.OnMessageReceiced(webSocketHandler, receiveString);//调用MessageHandler
}
}
}
await HandleMessage(webSocket);
}

public void ProcessRequest(HttpContext context)
{

}

public bool IsReusable { get; }
public bool IsReusable
{
get { return true; }
}
}
#endif
}

0 comments on commit a5611de

Please sign in to comment.