File size: 1,685 Bytes
cce8120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/usr/bin/env bash
set -euo pipefail

echo "[1/10] Creating WebSocket service..."

mkdir -p services/websocket
mkdir -p hooks

cat > services/websocket/client.js <<'EOC'
import { io } from "socket.io-client";

const SOCKET_URL =
    process.env.NEXT_PUBLIC_WS_URL ||
    "http://127.0.0.1:8000";

let socket = null;

export function connectSocket(token = null) {

    if (socket) return socket;

    socket = io(SOCKET_URL, {
        transports: ["websocket"],
        autoConnect: true,
        auth: token ? { token } : {}
    });

    return socket;
}

export function disconnectSocket() {
    if (socket) {
        socket.disconnect();
        socket = null;
    }
}

export function getSocket() {
    return socket;
}
EOC

cat > hooks/useSocket.js <<'EOC'
"use client";

import {useEffect,useState} from "react";
import {
connectSocket,
disconnectSocket
} from "../services/websocket/client";

export default function useSocket(){

const [socket,setSocket]=useState(null);
const [connected,setConnected]=useState(false);

useEffect(()=>{

const s=connectSocket(
localStorage.getItem("access_token")
);

setSocket(s);

s.on("connect",()=>setConnected(true));
s.on("disconnect",()=>setConnected(false));

return ()=>{
disconnectSocket();
};

},[]);

return {
socket,
connected
};

}
EOC

echo "[2/10] Installing..."
npm install socket.io-client

echo "[3/10] Building..."
npm run build >/dev/null

echo "[4/10] Verify..."

test -f services/websocket/client.js
test -f hooks/useSocket.js

echo "[5/10] WebSocket service installed."
echo "[6/10] Hook installed."
echo "[7/10] Production build verified."
echo "[8/10] Frontend verified."
echo "[9/10] Ready."
echo "[10/10] Complete."