Untitled

 avatar
unknown
plain_text
2 years ago
1.5 kB
7
Indexable
import "./styles.css";

import React from "react";
import { useState, useEffect } from "react";

class ConnectionClass {
  constructor() {
    console.log("Socket is created");
  }
  connect(url) {
    console.log("Connected:" + url);
  }
  send(data) {
    console.log("Sending " + data);
  }
  disconnect() {
    console.log("Disconnected");
  }
  subscribe(name) {
    console.log(name + " has subscribed");
  }
  unsubscribe(name) {
    console.log(name + " has unsubscribed");
  }
}

function Connection({ connection }) {
  const [isConnected, setIsConnected] = useState(false);

  const [url, setUrl] = useState("");

  useEffect(() => {
    return () => {
      connection.disconnect();
    };
  }, [connection]);

  function handleButtonClick(e) {
    isConnected ? connection.disconnect() : connection.connect(url);
    setIsConnected(!isConnected);
  }

  return (
    <>
      <button onClick={handleButtonClick}>
        {isConnected ? "Disconnect" : "Connect"}
      </button>
      <input type="text" value={url} onChange={(e) => setUrl(e.target.value)} />
    </>
  );
}

const connection = new ConnectionClass();

/*
const connectionContext = {
  subscribe: connection.subscribe,
  unsubscribe: connection.unsubscribe,
  send: connection.subscribe
};
*/

export default function App() {
  return (
    <div className="App">
      <Connection connection={connection} />
    </div>
  );
}
Editor is loading...