Source

frontend/siinc-tv/src/socketProvider.js

/**
 * Socket provider for an always active socket, provides a socket for every client
 * 
 * @module SocketProvider
 * @category Frontend
 * @subcategory Provider
 */
import React from "react";
import SocketContext from "./socketContext";
import socketIOClient from "socket.io-client";

const SOCKET_SERVER_URL = "http://localhost:4000";

class SocketProvider extends React.Component {
  constructor(props) {
    super(props);
    this.state = { socket: null, streamRoomId: null };

    let sock = socketIOClient(SOCKET_SERVER_URL, {
      withCredentials: true,
      transports: ["websocket"],
    });
    this.state.socket = sock;

    // Bindings go here
  }

  componentDidMount() {}

  componentWillUnmount() {
    if (this.state.socket != null) {
      this.state.socket.disconnect();
    }
  }

  render() {
    return (
      <SocketContext.Provider
        value={{
          socket: this.state.socket,
          streamRoomId: this.state.streamRoomId,
          setStreamRoomId: (id) => this.setState({ streamRoomId: id }),
        }}
      >
        {this.props.children}
      </SocketContext.Provider>
    );
  }
}

export default SocketProvider;