Ограничения ввода-вывода сокета излучают? - PullRequest
0 голосов
/ 16 июня 2020

Итак, я использую socket.io в react native, и у меня было работающее приложение, в котором пользователь мог создать комнату, а затем оставить ее

Client

  • AddRoom - испустить
  • LeaveRoom - выдать
  • AddRoomReturn - вкл
  • LeaveRoomReturn - вкл
    export const GroupContext = createContext<GroupService>(null);

    export const GroupProvider = (props: any): any => { 
        const endpoint = "http://192.168.0.13:3000";
        const [socket, setSocket] = useState<SocketIOClient.Socket>(socketIO(endpoint, {transports: ["websocket"], jsonp: false}));
        const [group, setGroup] = useState<Group>(null);
        const [isInGroup, setIsInGroup] = useState<Boolean>(false);

        socket.on("connect", () => {
            console.log("connected");
        });
        socket.on("addGroupReturn", (data) => {
            console.log(data)
            if (data.errorCode === 0)
            {
                let group:Group = JSON.parse(data.group);
                setGroup(group);
                setIsInGroup(true);
                console.log("joined group: " + group.GroupId);
            }
            else if (data.errorCode === 1)
            {
                console.log("You are already in a group");
            }

        });
        socket.on("joinGroupReturn", (data) => {
            console.log(data)
            if (data.errorCode === 0)
            {
                let group:Group = JSON.parse(data.group);
                setGroup(group);
                setIsInGroup(true);
                console.log("joined group: " + group.GroupId);
            }
            else if (data.errorCode === 1)
            {
                console.log("You are already in a group");
            }
            else if (data.errorCode === 2)
            {
                console.log("Group doesn't exist!");
            }
        });

        socket.on("leaveGroupReturn", () => {
            console.log("Left the group");
            setIsInGroup(false);
            setGroup(null);
        })
        const AddGroup = (nickName: string) => {
            socket.emit("addGroup", nickName);
        }
        const JoinGroup = (nickName: string) => {
            console.log("This gets called");
            socket.emit("test"); //This doesn't
        }
        const LeaveGroup = () => {
            socket.emit("leaveGroup");
        }
        return <GroupContext.Provider value={{...group, isInGroup, AddGroup, JoinGroup, LeaveGroup, GetMembers, GetCurrentGroupId}} {...props} />;
    }
    export const useGroupService = (): GroupService => {
        const context = useContext<GroupService>(GroupContext); 
        if (typeof context === 'undefined')
        {
            throw new Error('GroupContext must be used within a GroupProvider');
        }
        return context;
    }

Сервер

  • AddRoom - вкл
  • LeaveRoom - на
  • AddRoomReturn - испускает
  • LeaveRoomReturn - выпускает
const PORT: number = parseInt(process.env.PORT as string, 10);
const app = express();
app.use(helmet());
app.use(cors());
app.use(express.json());

let groups: Group[] = [];

const server = app.listen(PORT, () => {
  console.log(`Listening on port ${PORT}`);
});
const io = socketIo(server, {
  transports: ["websocket"]
});

io.on("connection", (socket) => {
  console.log("A client connected...")
  socket.emit("connect");
  socket.on("addGroup", (nickName) => {
    if (isSocketIdInGroup(socket.id)) {
      socket.emit("addGroupReturn", { errorCode: 1 });
    } else {
      let id = Math.random().toString(36).substring(7);
      if (nickName === "") nickName = "Anonymous";
      let member: Member = {
        nickName: nickName + " (Leader)",
        socketId: socket.id,
      };
      let group: Group = { GroupId: id, Members: [member] };
      groups.push(group);
      socket.emit("addGroupReturn", {
        errorCode: 0,
        group: JSON.stringify(group),
      });
      console.log(groups);
    }
  });
  socket.on("test", () => {
    console.log("HI"); //This doesn't call
  });
  socket.on("leaveGroup", () => {
    leaveGroup(socket);
  });

  socket.on("disconnect", () => {
    console.log("Client disconnected");
    leaveGroup(socket);
  });

});

Это прекрасно работает ... Однако когда я пытаюсь добавить новое излучение на клиенте, новый веб-сокет просто не работает. Кроме того, когда я запускаю его в chrome и просматриваю вкладку «сеть» в инструментах разработчика, приведенные выше примеры появляются, однако ниже не отображаются.

Я даже попытался сделать это как можно проще:

Клиент

console.log("This log works");
socket.emit("test");

Сервер

socket.on("test", () => {
 console.log("This log DOESN'T Work");
});

Я буквально в растерянности. Я не знаю, почему другие работают, но это не ... Это буквально копировальная паста тех, которые работают. Я очень ценю любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...