@iosio/websocket-client
Version:
Simple wrapper for native client-side WebSocket. Similar to socket.io. Easy to use with any backend
115 lines (88 loc) • 2.57 kB
JavaScript
import React from 'react';
import Socket from "./@iosio/websocket-client";
import {typeOf} from "@iosio/utils/lib/type_checks"
const socket = new Socket({
websocket: WebSocket,
websocket_options: null,
url: "ws://" + window.location.hostname + ":4000",
auto_reconnect: {every: 2000},
should_console_log: true,
sendMapper: ({event, type, data}) => ({
event,
data: {type, data}
}),
requestMapper: ({event, type, response_id, data}) => ({
event,
data: {type, response_id, data}
})
});
socket.open();
// socket.on('connect', () => {
// console.log('-------connected')
// });
//
// socket.on('disconnect', () => {
// console.log('-------disconnect')
// });
//
// socket.on('reconnecting', () => {
// console.log('-------reconnecting')
// });
//
// socket.on('error', () => {
// console.log('-------error')
// });
class App extends React.Component {
state = {
message: '',
response: '',
send_response: '',
test: ''
};
componentDidMount() {
// mitt.on('test2',(data)=>{
// this.setState({test: data})
// })
socket.on('send-response', (data) => {
console.log('hard coded response to send')
this.setState({send_response: data})
})
}
request = () => {
socket.request('response_test', {msg: this.state.message}, (data) => {
console.log('received response from server: ', data);
this.setState({response: data});
})
};
send = () => {
socket.send('send-response', {msg: this.state.message});
}
render() {
return (
<div className="App">
<button onClick={() => socket.open()}>
open
</button>
<button onClick={() => socket.close()}>
close
</button>
Message:
<input value={this.state.value} onChange={(e) => this.setState({message: e.target.value})}/>
<button onClick={this.send}>
send
</button>
<button onClick={this.request}>
request
</button>
<br/>
<br/>
Response to request: {this.state.response}
<br/>
Response to send: {this.state.send_response}
<br/>
<br/>
</div>
);
}
}
export default App;