Skip to content

Commit

Permalink
working websoket
Browse files Browse the repository at this point in the history
  • Loading branch information
Gary Woodfine committed Sep 10, 2023
1 parent 522b4ca commit 0033b2b
Show file tree
Hide file tree
Showing 19 changed files with 68 additions and 73 deletions.
@@ -0,0 +1,61 @@
using System.Net;
using System.Net.WebSockets;
using System.Text;
using Ardalis.ApiEndpoints;
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;

namespace Api.Activities.Sockets.Queries.SampleSocket;

[Route("ws")]
public class WebSocketQuery : EndpointBaseAsync.WithoutRequest.WithoutResult
{
private readonly ILogger<WebSocketQuery> _logger;
public WebSocketQuery(ILogger<WebSocketQuery> logger)
{
_logger = logger;
}

[HttpGet]
[SwaggerOperation(
Summary = "Web Socket Upgrade Request to initiate a Web Socket Session",
Description = "Web Socket Upgrade Request to initiate a Web Socket Session",
OperationId = "1318F7F5-4FE0-4315-BBF3-0DD1A9CABB5C",
Tags = new[] { Routes.Sockets})
]
[ProducesErrorResponseType(typeof(BadRequestObjectResult))]
public override async Task HandleAsync(CancellationToken cancellationToken = new CancellationToken())
{
//let ws = new WebSocket('wss://localhost:5001/ws');
if (HttpContext.WebSockets.IsWebSocketRequest)
{
using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();
_logger.Log(LogLevel.Information, "WebSocket connection established");
await Echo(webSocket);
}
else
{
HttpContext.Response.StatusCode = (int) HttpStatusCode.BadRequest;
}
}
private async Task Echo(WebSocket webSocket)
{
var buffer = new byte[1024 * 4];
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
_logger.Log(LogLevel.Information, "Message received from Client");

while (!result.CloseStatus.HasValue)
{
var serverMsg = Encoding.UTF8.GetBytes($"Client Message: {Encoding.UTF8.GetString(buffer)}");
await webSocket.SendAsync(new ArraySegment<byte>(serverMsg, 0, serverMsg.Length), result.MessageType, result.EndOfMessage, CancellationToken.None);
_logger.Log(LogLevel.Information, "Message sent to Client");

buffer = new byte[1024 * 4];
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
_logger.Log(LogLevel.Information, "Message received from Client");
}

await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
_logger.Log(LogLevel.Information, "WebSocket connection closed");
}
}

This file was deleted.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Expand Up @@ -151,7 +151,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/home/gary/.dotnet/sdk/7.0.400/RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/7.0.110/RuntimeIdentifierGraph.json"
}
}
}
Expand Down
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
793077b769a957ea5127b9b4796caa63e043e35c
1077babeac3216bfae1d36bafec1a8348da6b8cf
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Expand Up @@ -4145,7 +4145,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/home/gary/.dotnet/sdk/7.0.400/RuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/7.0.110/RuntimeIdentifierGraph.json"
}
}
}
Expand Down
@@ -1,6 +1,6 @@
{
"version": 2,
"dgSpecHash": "UAubKzKTWKDXVkmI1y9qHaqZNhQV1XKVxJX6mwTPYTXA1ohKTrW7Z9cD0SAIlQV6bjRNYXnEJctD7IQwSXggQw==",
"dgSpecHash": "llJ9DEbL2qD+2UYA7FEwn9lveihpVauU1WYbkawVJHrmvitgxCf/eI/jfnXcQpmzePSRg0c0J6K4ytypUAXvJw==",
"success": true,
"projectFilePath": "/home/gary/Documents/garywoodfine/blog-tutorials/how-to-create-websocket-server-dotnet/src/api/ApiSocket.csproj",
"expectedPackageFiles": [
Expand Down
@@ -1 +1 @@
"restore":{"projectUniqueName":"/home/gary/Documents/garywoodfine/blog-tutorials/how-to-create-websocket-server-dotnet/src/api/ApiSocket.csproj","projectName":"ApiSocket","projectPath":"/home/gary/Documents/garywoodfine/blog-tutorials/how-to-create-websocket-server-dotnet/src/api/ApiSocket.csproj","outputPath":"/home/gary/Documents/garywoodfine/blog-tutorials/how-to-create-websocket-server-dotnet/src/api/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net7.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net7.0":{"targetAlias":"net7.0","projectReferences":{}}},"warningProperties":{"allWarningsAsErrors":true,"warnAsError":["NU1605"]}}"frameworks":{"net7.0":{"targetAlias":"net7.0","dependencies":{"Ardalis.ApiEndpoints":{"target":"Package","version":"[4.1.0, )"},"AutoMapper":{"target":"Package","version":"[12.0.1, )"},"AutoMapper.Extensions.Microsoft.DependencyInjection":{"target":"Package","version":"[12.0.1, )"},"FluentValidation":{"target":"Package","version":"[11.7.1, )"},"FluentValidation.AspNetCore":{"target":"Package","version":"[11.3.0, )"},"FluentValidation.DependencyInjectionExtensions":{"target":"Package","version":"[11.7.1, )"},"MediatR":{"target":"Package","version":"[12.1.1, )"},"Microsoft.AspNetCore.JsonPatch":{"target":"Package","version":"[7.0.5, )"},"Microsoft.AspNetCore.Mvc.NewtonsoftJson":{"target":"Package","version":"[7.0.5, )"},"Microsoft.AspNetCore.SignalR.Common":{"target":"Package","version":"[7.0.10, )"},"Microsoft.EntityFrameworkCore.Design":{"target":"Package","version":"[7.0.10, )"},"Npgsql":{"target":"Package","version":"[7.0.4, )"},"Npgsql.EntityFrameworkCore.PostgreSQL":{"target":"Package","version":"[7.0.4, )"},"Serilog":{"target":"Package","version":"[3.0.1, )"},"Serilog.AspNetCore":{"target":"Package","version":"[7.0.0, )"},"Serilog.Exceptions":{"target":"Package","version":"[8.4.0, )"},"Serilog.Settings.Configuration":{"target":"Package","version":"[7.0.1, )"},"Serilog.Sinks.Seq":{"target":"Package","version":"[5.2.2, )"},"Swashbuckle.AspNetCore":{"target":"Package","version":"[6.5.0, )"},"Swashbuckle.AspNetCore.Annotations":{"target":"Package","version":"[6.5.0, )"},"Threenine.ApiResponse":{"target":"Package","version":"[1.0.26, )"},"Threenine.Data":{"target":"Package","version":"[5.0.0, )"},"Threenine.DataService":{"target":"Package","version":"[0.2.1, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.AspNetCore.App":{"privateAssets":"none"},"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/home/gary/.dotnet/sdk/7.0.400/RuntimeIdentifierGraph.json"}}
"restore":{"projectUniqueName":"/home/gary/Documents/garywoodfine/blog-tutorials/how-to-create-websocket-server-dotnet/src/api/ApiSocket.csproj","projectName":"ApiSocket","projectPath":"/home/gary/Documents/garywoodfine/blog-tutorials/how-to-create-websocket-server-dotnet/src/api/ApiSocket.csproj","outputPath":"/home/gary/Documents/garywoodfine/blog-tutorials/how-to-create-websocket-server-dotnet/src/api/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net7.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net7.0":{"targetAlias":"net7.0","projectReferences":{}}},"warningProperties":{"allWarningsAsErrors":true,"warnAsError":["NU1605"]}}"frameworks":{"net7.0":{"targetAlias":"net7.0","dependencies":{"Ardalis.ApiEndpoints":{"target":"Package","version":"[4.1.0, )"},"AutoMapper":{"target":"Package","version":"[12.0.1, )"},"AutoMapper.Extensions.Microsoft.DependencyInjection":{"target":"Package","version":"[12.0.1, )"},"FluentValidation":{"target":"Package","version":"[11.7.1, )"},"FluentValidation.AspNetCore":{"target":"Package","version":"[11.3.0, )"},"FluentValidation.DependencyInjectionExtensions":{"target":"Package","version":"[11.7.1, )"},"MediatR":{"target":"Package","version":"[12.1.1, )"},"Microsoft.AspNetCore.JsonPatch":{"target":"Package","version":"[7.0.5, )"},"Microsoft.AspNetCore.Mvc.NewtonsoftJson":{"target":"Package","version":"[7.0.5, )"},"Microsoft.AspNetCore.SignalR.Common":{"target":"Package","version":"[7.0.10, )"},"Microsoft.EntityFrameworkCore.Design":{"target":"Package","version":"[7.0.10, )"},"Npgsql":{"target":"Package","version":"[7.0.4, )"},"Npgsql.EntityFrameworkCore.PostgreSQL":{"target":"Package","version":"[7.0.4, )"},"Serilog":{"target":"Package","version":"[3.0.1, )"},"Serilog.AspNetCore":{"target":"Package","version":"[7.0.0, )"},"Serilog.Exceptions":{"target":"Package","version":"[8.4.0, )"},"Serilog.Settings.Configuration":{"target":"Package","version":"[7.0.1, )"},"Serilog.Sinks.Seq":{"target":"Package","version":"[5.2.2, )"},"Swashbuckle.AspNetCore":{"target":"Package","version":"[6.5.0, )"},"Swashbuckle.AspNetCore.Annotations":{"target":"Package","version":"[6.5.0, )"},"Threenine.ApiResponse":{"target":"Package","version":"[1.0.26, )"},"Threenine.Data":{"target":"Package","version":"[5.0.0, )"},"Threenine.DataService":{"target":"Package","version":"[0.2.1, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.AspNetCore.App":{"privateAssets":"none"},"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/lib/dotnet/sdk/7.0.110/RuntimeIdentifierGraph.json"}}
@@ -1 +1 @@
16941281348651623
16942852800447090
@@ -1 +1 @@
16942846172925585
16942852800447090

0 comments on commit 0033b2b

Please sign in to comment.