62,072
社区成员
发帖
与我相关
我的任务
分享
public Socket(HttpContext ctx, DeleFunc func) {
MessageBack = func;
ctx.AcceptWebSocketRequest(ProcessChat);
}
private async Task ProcessChat(AspNetWebSocketContext ctx) {
wsCtx = ctx;
var skt = ctx.WebSocket;
string userMsg, exitMsg = "Close";
while(true) {
var buffer = new ArraySegment<byte>(new byte[2048]); try {
var result = await skt.ReceiveAsync(buffer, CancellationToken.None);
if(result.MessageType == WebSocketMessageType.Close) break;
userMsg = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
} catch(WebSocketException e) { exitMsg = e.Message; break; }
catch(Exception e) { exitMsg = "[" + e.GetType() + "]" + e.Message; break; }
OnMessage(userMsg, 1);
}
OnMessage(exitMsg, 0);
}
new WebSocketServer("ws://0.0.0.0:8181").start(socket=>{
socket.OnOpen = () =>{},
socket.OnClose = () =>{}.
socket.OnMessage = message =>{}
});
客户端掉线断开刷新都会触发OnClose ,并且可以从你的"集合"中移除..
这只是这个DLL..其他类似tcpserver 基本都有onclose事件....至少我看到过好几款都有..