Итак, я использую 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");
});
Я буквально в растерянности. Я не знаю, почему другие работают, но это не ... Это буквально копировальная паста тех, которые работают. Я очень ценю любую помощь.