in the application I made using this library react-native-tcp-socket, the server is created and the functions in the listen event work, but server.on('connection',() => {}) does not work
Server.js
import TcpSocket from 'react-native-tcp-socket';
import NetInfo from '@react-native-community/netinfo';
export const server = new TcpSocket.Server();
export let address = null;
const getWifi = async () => {
try {
const state = await NetInfo.fetch();
if (state.isConnected) {
const netInfo = state;
const newIpAddress = netInfo.details && netInfo.details.ipAddress;
return newIpAddress;
}
} catch (error) {
console.log(error);
}
};
export const closeServer = () => {
if (server) {
console.log(`server closed`);
server.close();
} else {
console.log('server not found');
}
};
export const init = async () => {
const ip = await getWifi();
server.on('connection', socket => {
socket.on('data', () => {
socket.write('Echo server\r\n');
});
});
server.listen({port: 0, host: `127.0.0.1`, reuseAddress: true}, () => {
const port = server.address()?.port;
if (!port) throw new Error('Server port not found');
address = server.address();
console.log(address);
});
};
Client.js
import TcpSocket from 'react-native-tcp-socket';
import NetInfo from '@react-native-community/netinfo';
export const client = new TcpSocket.Socket();
const getWifi = async () => {
try {
const state = await NetInfo.fetch();
if (state.isConnected) {
const netInfo = state;
const newIpAddress = netInfo.details && netInfo.details.ipAddress;
return newIpAddress;
}
} catch (error) {
console.log(error);
}
};
export const init = async port => {
const ip = await getWifi();
const options = {
port: port,
host: `127.0.0.1`,
localAddress: `127.0.0.1`,
reuseAddress: true,
localPort: port,
interface: "wifi",
};
client.connect(options, () => {
client.write(`connected to server`);
});
client.on('data', data => {
console.log(`new data`, data.toString());
});
};
SocketProvder.jsx to start the server
import React, {useEffect, useState} from 'react';
import {SocketContext} from './SocketContext';
import {closeServer, server, init} from '../server/Server';
export default function SocketProvider({children}) {
const [isInitServer, setIsInitServer] = useState(false);
useEffect(() => {
if (isInitServer) {
server.on('connection', socket => {
console.log(socket.address());
socket.on('data', data => {
console.log(`in server `, data.toString());
});
});
console.log(server.eventNames());
init();
}
return () => {
if (isInitServer) {
closeServer();
setIsInitServer(false);
}
};
}, [isInitServer]);
return (
<SocketContext.Provider
value={{
isInitServer,
setIsInitServer,
}}>
{children}
</SocketContext.Provider>
);
}
ClientProvider.js
import React, {useEffect, useState} from 'react';
import {ClientContext} from './ClientContext';
import {init, client} from '../server/Client';
export default function ClientProvider({children}) {
const [isJoinedClient, setIsJoinedClient] = useState({
isConnectected: false,
port: null,
});
useEffect(() => {
if (isJoinedClient.isConnectected && isJoinedClient.port !== null) {
client.on('data', data => {
console.log(`client data`, data.toString());
});
client.on('error', err => {
console.log(`client error: `, err);
client.destroy();
beginIsJoined();
});
init(isJoinedClient.port);
}
return () => {
if (isJoinedClient.isConnectected && isJoinedClient.port !== null) {
client.destroy();
beginIsJoined();
}
};
}, [isJoinedClient]);
const handleIsJoined = (boolVal, port) => {
setIsJoinedClient(prev => ({
...prev,
isConnectected: boolVal,
port: port,
}));
};
const beginIsJoined = () => {
setIsJoinedClient(prev => ({
...prev,
isConnectected: false,
port: null,
}));
};
return (
<ClientContext.Provider
value={{isJoinedClient, setIsJoinedClient: handleIsJoined}}>
{children}
</ClientContext.Provider>
);
}
server.on('connection', socket => {
console.log(socket.address());
socket.on('data', data => {
console.log(`in server `, data.toString());
});
In this method, it should write the address of the socket when there is a connection or log when there is data coming in, but it is not working, can you help me what I might be doing wrong?
thanks in advance