Skip to content

Commit

Permalink
add ws fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
xeaone committed May 25, 2022
1 parent a4d4ef4 commit 10faada
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 50 deletions.
69 changes: 46 additions & 23 deletions examples/ws-client.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,57 @@
//chat_client.ts

function logError (msg: string) {
console.log(msg);
Deno.exit(1);
}
// function logError (msg: string) {
// console.log(msg);
// Deno.exit(1);
// }

// function handleConnected (ws: WebSocket) {
// console.log('Connected to server ...');
// handleMessage(ws, 'Welcome!');
// }

// function handleMessage (ws: WebSocket, data: string) {
// console.log('SERVER >> ' + data);
// const reply = prompt('Client >> ') || 'No reply';
// if (reply === 'exit') return ws.close();
// ws.send(reply as string);
// }

// function handleError (e: Event | ErrorEvent) {
// console.log(e instanceof ErrorEvent ? e.message : e.type);
// }

function handleConnected (ws: WebSocket) {
console.log("Connected to server ...");
handleMessage(ws, "Welcome!");
function open (e: Event) {
const w = e.target as WebSocket;
console.log('open');
w.send('foo');
}

function handleMessage (ws: WebSocket, data: string) {
console.log("SERVER >> " + data);
const reply = prompt("Client >> ") || "No reply";
if (reply === "exit") return ws.close();
ws.send(reply as string);
function close (e: Event) {
const w = e.target as WebSocket;
console.log('close');
}

function handleError (e: Event | ErrorEvent) {
console.log(e instanceof ErrorEvent ? e.message : e.type);
function error (e: Event) {
const w = e.target as WebSocket;
console.log('error');
}

console.log("Connecting to server ...");
function message (e: MessageEvent) {
const w = e.target as WebSocket;
console.log('client message: ', e.data);
// w.send(new Date().toString());
}

try {
const ws = new WebSocket("ws://localhost:8000");
ws.onopen = () => handleConnected(ws);
ws.onmessage = (m) => handleMessage(ws, m.data);
ws.onclose = () => logError("Disconnected from server ...");
ws.onerror = (e) => handleError(e);
} catch (err) {
logError("Failed to connect to server ... exiting");

const ws = new WebSocket('ws://localhost:8000');

ws.onopen = open;
ws.onclose = close;
ws.onerror = error;
ws.onmessage = message;

// ws.send('client: open');
} catch (e) {
console.log(e);
}
44 changes: 22 additions & 22 deletions examples/ws-server.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
//chat_server.ts
import { serve } from "https://deno.land/std/http/mod.ts";
import { serve } from 'https://deno.land/std/http/mod.ts';

function logError (msg: string) {
console.log(msg);
Deno.exit(1);
function open (e: Event) {
const w = e.target as WebSocket;
console.log('open');
}

function handleConnected () {
console.log("Connected to client ...");
function close (e: Event) {
const w = e.target as WebSocket;
console.log('close');
}

function handleMessage (ws: WebSocket, data: string) {
console.log("CLIENT: " + data);
const reply = prompt("Server: ") || "No reply";
if (reply === "exit") return ws.close();
ws.send(reply as string);
function error (e: Event) {
const w = e.target as WebSocket;
console.log('error');
}

function handleError (e: Event | ErrorEvent) {
console.log(e instanceof ErrorEvent ? e.message : e.type);
function message (e: MessageEvent) {
const w = e.target as WebSocket;
console.log('server message: ', e.data);
w.send(new Date().toString());
}


function reqHandler (req: Request) {
function request (req: Request) {

if (req.headers.get('upgrade')) {

Expand All @@ -32,16 +31,17 @@ function reqHandler (req: Request) {

const { socket: ws, response } = Deno.upgradeWebSocket(req);

ws.onopen = () => handleConnected();
ws.onmessage = (m) => handleMessage(ws, m.data);
ws.onclose = () => logError("Disconnected from client ...");
ws.onerror = (e) => handleError(e);
ws.onopen = open;
ws.onclose = close;
ws.onerror = error;
ws.onmessage = message;

return response;
}

return new Response('hello world');
}

console.log("Waiting for client ...");
serve(reqHandler, { port: 8000 });
serve(request, { port: 8000 });

console.log('listening: 8000');
10 changes: 5 additions & 5 deletions socket.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import Context from './context.ts';
import Plugin from './plugin.ts';

type Open = (ws: WebSocket, ev: Event) => any;
type Close = (ws: WebSocket, ev: CloseEvent) => any;
type Message = (ws: WebSocket, ev: MessageEvent) => any;
type Error = (ws: WebSocket, ev: Event | ErrorEvent) => any;
type Open = (ws: WebSocket, ev: Event) => void;
type Close = (ws: WebSocket, ev: CloseEvent) => void;
type Message = (ws: WebSocket, ev: MessageEvent) => void;
type Error = (ws: WebSocket, ev: Event | ErrorEvent) => void;

export default class Socket implements Plugin {

#open?: Open;
#close?: Close;
#message?: Message;
#error?: Error;
#message?: Message;

constructor () {

Expand Down

0 comments on commit 10faada

Please sign in to comment.