useC2C.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import React, { useContext } from "react";
  2. import { useSocket } from "@scripters/use-socket.io";
  3. import { join } from "client2client.io";
  4. export const C2CContext = React.createContext([null, false]);
  5. export const C2CProvider = ({ room, ...props }) => {
  6. const socket = useSocket();
  7. const [joined, setJoined] = React.useState(false);
  8. const [isMaster, setIsMaster] = React.useState(false);
  9. const [c2c, setC2c] = React.useState(null);
  10. const roomRef = React.useRef(null);
  11. React.useEffect(() => {
  12. if (!socket) {
  13. return;
  14. }
  15. join(socket, room, (newRoom) => {
  16. console.log("isMaster");
  17. setIsMaster(true);
  18. }).then((newRoom) => {
  19. console.log("Connected…");
  20. roomRef.current = newRoom;
  21. setC2c(newRoom);
  22. setJoined(true);
  23. return () => {
  24. socket.disconnect();
  25. };
  26. });
  27. }, [room, socket]);
  28. if (!joined) {
  29. return null;
  30. }
  31. return (
  32. <C2CContext.Provider value={[c2c, joined, isMaster]}>
  33. {props.children}
  34. </C2CContext.Provider>
  35. );
  36. };
  37. export const useC2C = () => {
  38. const [c2c, joined, isMaster] = useContext(C2CContext);
  39. return [c2c, joined, isMaster];
  40. };
  41. export default { C2CContext, C2CProvider, useC2C };