DEV Community

Cover image for Chat made with Deno
Assis Ferreira
Assis Ferreira

Posted on

9 1

Chat made with Deno

There are few days that was launched the Deno, a new JavaScript and TypeScript runtime built in Rust. In this project we use that technology to create a simple web chat.

The project code is hosted in that repository: https://github.com/assisfery/WebSocket-Chat-made-with-Deno

Alt Text

Web Server

Here we load the Web Server module to host our index file.

import { listenAndServe } from "https://deno.land/std/http/server.ts";

listenAndServe({port: 8000}, async(req) => {

    if(req.method == "GET" && req.url == "/")
        req.respond({ body: await Deno.open('index.html') });

});
Enter fullscreen mode Exit fullscreen mode

WebSocket Server

We load the WebSocket client and WebSocket Serve module,
to listen client message and broadcast to every user connected.

import { WebSocket, WebSocketServer } from "https://deno.land/x/websocket/mod.ts";

const wss = new WebSocketServer(8080);

wss.on("connection", function (ws: WebSocket) {

    ws.on("message", function (message: string) {

        console.log(message);

        wss.clients.forEach(function each(client) {
            if (!client.isClosed) {
                client.send(message);
            }
        });

    });

});
Enter fullscreen mode Exit fullscreen mode

WebSocket Client

In our index file we handle our WebSocket client using JavaScript native API.

var userName = null;
var clientWS = null;

function main()
{
    if($("#usr").val() == "")
    {
        swal("Warning", "Empty name!", "warning");
        return;
    }

    userName = $("#usr").val();

    $("#loader").show();
    $("#sign-in").hide();

    clientWS = new WebSocket("ws://localhost:8080");

    clientWS.onopen = function (event) {
        swal("Conneceted", "Connected successfully!", "success");

        $("#loader").hide();
        $("#chatbox").show();           
    };

    clientWS.onerror = function (event) {
        swal("Error", "Something happens!", "error");

        $("#chatbox").hide();
        $("#sign-in").show();           
    };

    clientWS.onclose = function (event) {
        swal("Closed", "Your connection was closed!", "info");

        $("#chatbox").hide();
        $("#sign-in").show();           
    };

    clientWS.onmessage = function (event) {
        console.log(event.data);

        var message = JSON.parse(event.data);

        if(message.type == "message")
        {
            if(message.user != userName)
                $("#message-box").append('<div><div class="bubble"><b>' + message.user + ': </b>' + message.content + '</div></div>');
            else
                $("#message-box").append('<div class="text-right"><div class="bubble bubble-info"><b>' + message.user + ': </b>' + message.content + '</div></div>');
        }


    };
}

function send()
{
    if($("#msg").val() == "")
        return;

    var message = {
        type: "message",
        user: userName,
        content: $("#msg").val(),
    };

    clientWS.send(JSON.stringify(message));

    $("#msg").val("");
}
Enter fullscreen mode Exit fullscreen mode

SurveyJS custom survey software

Build Your Own Forms without Manual Coding

SurveyJS UI libraries let you build a JSON-based form management system that integrates with any backend, giving you full control over your data with no user limits. Includes support for custom question types, skip logic, an integrated CSS editor, PDF export, real-time analytics, and more.

Learn more

Top comments (1)

Collapse
 
neisha1618 profile image
Altoneisha Rose

This is my introduction to Deno and Rust. amazing

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs