Skip to content
Snippets Groups Projects
Commit f0dabccf authored by Christian Hess Bore's avatar Christian Hess Bore
Browse files

Øving fullført

parent 09a79a3e
No related branches found
No related tags found
No related merge requests found
......@@ -7,6 +7,7 @@ import { onMounted } from "vue";
const chatStore = useChatStore();
// Oppretter WS tilkoblingen når komponent monteres
onMounted(() => {
initWebSocket(chatStore);
});
......
......@@ -9,14 +9,16 @@ const server = net.createServer((socket) => {
socket.once('data', (data) => {
const request = data.toString();
if (request.includes('Upgrade: websocket')) {
// Extract the Sec-WebSocket-Key
// Finner Sec-WebSocket-Key felt av requesten
const key = request.match(/Sec-WebSocket-Key: (.+)/)[1].trim();
// Generer Sec-WebSocket-Accept fra Sec-WebSocket-Key
const acceptKey = crypto
.createHash('sha1')
.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
.digest('base64');
// Send WebSocket handshake response
// Sender Handshake responsen
socket.write(
'HTTP/1.1 101 Switching Protocols\r\n' +
'Upgrade: websocket\r\n' +
......@@ -25,12 +27,15 @@ const server = net.createServer((socket) => {
);
console.log('Handshake complete, WebSocket connection established.');
// Legger til klienten i klientlisten
clients.add(socket);
// Listen for WebSocket frames
// Lytter etter ws rammer
socket.on('data', (buffer) => {
const message = decodeWebSocketFrame(buffer);
try {
// Skriver til alle klienter
for (const client of clients) {
client.write(encodeWebSocketFrame(message));
}
......@@ -39,13 +44,13 @@ const server = net.createServer((socket) => {
}
});
// Remove client when it disconnects
// Fjerner klienten fra klientlisten ved disconnect
socket.on('end', () => {
console.log('Client disconnected');
clients.delete(socket);
});
// Handle errors (prevents crashes on socket errors)
// Error handling
socket.on('error', (err) => {
console.log('Socket error:', err.message);
clients.delete(socket);
......@@ -56,7 +61,7 @@ const server = net.createServer((socket) => {
server.listen(3001, () => console.log('WebSocket server listening on port 3001'));
// Decode WebSocket frame (extracts text message from a client frame)
// Decoder
function decodeWebSocketFrame(buffer) {
const length = buffer[1] & 127;
let maskStart = 2;
......@@ -74,7 +79,7 @@ function decodeWebSocketFrame(buffer) {
return decoded;
}
// Encode WebSocket frame (wraps text messages in a proper WebSocket frame)
// Encoder
function encodeWebSocketFrame(message) {
const byteMessage = Buffer.from(message);
const length = byteMessage.length;
......
let socket = null;
export const initWebSocket = (chatStore) => {
// Create a WebSocket connection to the server
// Oppretter en WebSocket-tilkobling
socket = new WebSocket('ws://localhost:3001');
// Handle connection open
// Logging av tilkoblingen
socket.onopen = () => {
console.log('WebSocket connection established');
};
// Handle incoming messages
// Pusher meldinger til chatloggen når de mottas
socket.onmessage = (event) => {
console.log("Raw incoming message:", event.data);
......@@ -22,17 +22,18 @@ export const initWebSocket = (chatStore) => {
}
};
// Handle connection errors
// Error handling
socket.onerror = (error) => {
console.error('WebSocket error:', error);
};
// Handle connection close
// Logging når tilkoblingen lukkes
socket.onclose = () => {
console.log('WebSocket connection closed');
};
};
// Sender meldinger til serveren
export const request_post = async (chatStore, post) => {
try {
if (socket && socket.readyState === WebSocket.OPEN) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment