Created
June 17, 2016 08:21
-
-
Save anuraj/4da749b109a6f4402e089fa50b530cc2 to your computer and use it in GitHub Desktop.
Web socket example in ASP.NET Core
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@{ | |
ViewBag.Title = "Chat"; | |
} | |
<input id="txtMessage" style="width:40%" /> | |
<input id="cmdSend" type="button" value="Send" /> | |
<input id="cmdLeave" type="button" value="Log out" /> | |
<br /> | |
<div id="chatMessages" /> | |
@section scripts | |
{ | |
<script type="text/javascript"> | |
$(document).ready(function () { | |
$('#txtMessage').keypress(function (e) { | |
if (e.which == 13) { | |
ws.send($('#txtMessage').val()); | |
$('#txtMessage').val(''); | |
$('#txtMessage').focus(); | |
return false; | |
} | |
}); | |
var name = prompt('what is your name?:'); | |
//Add your website or project URL here | |
var url = 'ws://localhost:5000?name=' + name; | |
ws = new WebSocket(url); | |
ws.onopen = function () { | |
$('#messages').prepend('Connected <br/>'); | |
$('#cmdSend').click(function () { | |
ws.send($('#txtMessage').val()); | |
$('#txtMessage').val(''); | |
$('#txtMessage').focus(); | |
}); | |
}; | |
ws.onmessage = function (e) { | |
if (e.data.search(name) == -1) { | |
$('#chatMessages').css("color", "green"); | |
} | |
else { | |
$('#chatMessages').css("color", "blue"); | |
} | |
$('#chatMessages').prepend(e.data + '<br/>'); | |
$('#txtMessage').focus(); | |
}; | |
$('#cmdLeave').click(function () { | |
ws.close(); | |
}); | |
ws.onclose = function () { | |
//$('#chatMessages').prepend('Closed <br/>'); | |
$('#chatMessages').prepend(name+ ' - You are Log out.<br/>'); | |
}; | |
ws.onerror = function (e) { | |
$('#chatMessages').prepend('ERROR - Oops something went wront <br/>'); | |
}; | |
}); | |
</script> | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
app.UseWebSockets(); | |
app.Use(async (http, next) => | |
{ | |
if (http.WebSockets.IsWebSocketRequest) | |
{ | |
var webSocket = await http.WebSockets.AcceptWebSocketAsync(); | |
if (webSocket != null && webSocket.State == WebSocketState.Open) | |
{ | |
_webSocketCollection.Add(webSocket); | |
while (webSocket.State == WebSocketState.Open) | |
{ | |
var token = CancellationToken.None; | |
var buffer = new ArraySegment<Byte>(new Byte[4096]); | |
var received = await webSocket.ReceiveAsync(buffer, token); | |
switch (received.MessageType) | |
{ | |
case WebSocketMessageType.Text: | |
var request = Encoding.UTF8.GetString(buffer.Array, | |
buffer.Offset, | |
buffer.Count); | |
var type = WebSocketMessageType.Text; | |
var data = Encoding.UTF8.GetBytes(request); | |
buffer = new ArraySegment<Byte>(data); | |
_webSocketCollection.ForEach(async (socket) => | |
{ | |
if (socket != null && socket.State == WebSocketState.Open) | |
{ | |
await socket.SendAsync(buffer, type, true, token); | |
} | |
}); | |
break; | |
case WebSocketMessageType.Close: | |
_webSocketCollection.Remove(webSocket); | |
break; | |
} | |
} | |
} | |
} | |
else | |
{ | |
await next(); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hi anuraj can you provide working demo of web socket?