Skip to content

Commit

Permalink
Close connection when message too big, add clientside check
Browse files Browse the repository at this point in the history
  • Loading branch information
kova98 committed Oct 20, 2023
1 parent 42eb8af commit fd33d6c
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 4 deletions.
11 changes: 9 additions & 2 deletions Chat.Api/WebSocketService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,19 @@ private async Task RemoveUser(string name)
await BroadcastMessage(msg);
}

private static async Task Receive(WebSocket socket, Action<WebSocketReceiveResult, ArraySegment<byte>> handleMessage)
private async Task Receive(WebSocket socket, Action<WebSocketReceiveResult, ArraySegment<byte>> handleMessage)
{
var buffer = new byte[1024 * 4];
var buffer = new byte[1024 * 2];
while (socket.State == WebSocketState.Open)
{
var result = await socket.ReceiveAsync(new ArraySegment<byte>(buffer), default);
if (result.EndOfMessage == false)
{
var name = Connections.FirstOrDefault(x => x.Value == socket).Key;
await RemoveUser(name);
await socket.CloseAsync(WebSocketCloseStatus.MessageTooBig, "Max message size is 2KiB.", default);
return;
}
handleMessage(result, new ArraySegment<byte>(buffer, 0, result.Count));
}
}
Expand Down
25 changes: 24 additions & 1 deletion web-client/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,30 @@ enableEnterToSubmit(nameInput, connect);
nameInput.focus();

const messageInput = document.getElementById('messageInput');
enableEnterToSubmit(messageInput, sendMessage);
messageInput.addEventListener('keypress', function (event) {
if (event.key === 'Enter' && !event.shiftKey) {
if (messageText.length > 256){
return;
}

event.preventDefault();
sendMessage();
}
});

messageInput.addEventListener("input", function(event) {
const error = document.getElementById('error-message');
error.hidden = true;
sendButton.disabled = false;
const messageText = messageInput.value.trim();
if (messageText.length > 256){
error.innerText = 'Message is too long';
error.hidden = false;
const sendButton = document.getElementById('sendButton');
sendButton.disabled = true;
return;
}
});

function enableEnterToSubmit(input, action) {
input.addEventListener('keypress', function (event) {
Expand Down
3 changes: 2 additions & 1 deletion web-client/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ <h1>Chat</h1>
<div class="chat">
<div id="messages"></div>
<div class="input-section">
<div id="error-message" hidden></div>
<input class="input" type="text" id="messageInput" placeholder="Type a message">
<button class="button" onclick="sendMessage()">Send</button>
<button id="sendButton" class="button" onclick="sendMessage()">Send</button>
</div>
</div>
<div class="users-list" id="users">
Expand Down
12 changes: 12 additions & 0 deletions web-client/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,15 @@ h1 {
max-height: 40px;
}

.button:disabled {
background-color: grey;
cursor: not-allowed;
}

.button:disabled:hover {
background-color: grey;
}

.button:hover {
background-color: #E05A00;
}
Expand Down Expand Up @@ -149,3 +158,6 @@ h1 {
width: 12px;
}

#error-message {
color: red;
}

0 comments on commit fd33d6c

Please sign in to comment.