Skip to content

Instantly share code, notes, and snippets.

@anuraj
Created June 17, 2016 08:21
Show Gist options
  • Save anuraj/4da749b109a6f4402e089fa50b530cc2 to your computer and use it in GitHub Desktop.
Save anuraj/4da749b109a6f4402e089fa50b530cc2 to your computer and use it in GitHub Desktop.
Web socket example in ASP.NET Core
@{
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>
}
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();
}
});
@shankar00772
Copy link

hi anuraj can you provide working demo of web socket?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment