lotus/lotuspond/front/src/ConnMgr.js

89 lines
2.3 KiB
JavaScript
Raw Normal View History

2019-07-24 18:42:02 +00:00
import React from 'react';
import Cristal from 'react-cristal'
class ConnMgr extends React.Component {
constructor(props) {
super(props)
this.connect = this.connect.bind(this)
2019-07-25 00:10:52 +00:00
this.connectAll = this.connectAll.bind(this)
this.connect1 = this.connect1.bind(this)
this.connectChain = this.connectChain.bind(this)
this.state = {conns: {}}
}
2019-07-24 21:28:51 +00:00
async connect(action, from, to) {
if (action) {
2019-07-24 21:28:51 +00:00
const fromNd = this.props.nodes[from]
const toNd = this.props.nodes[to]
const toPeerInfo = await toNd.conn.call('Filecoin.NetAddrsListen', [])
await fromNd.conn.call('Filecoin.NetConnect', [toPeerInfo])
}
2019-07-25 00:10:52 +00:00
this.setState(prev => ({conns: {...prev.conns, [`${from},${to}`]: action}}))
}
connectAll() {
const nodes = this.props.nodes
let keys = Object.keys(nodes)
keys.filter((_, i) => i > 0).forEach((k, i) => {
keys.filter((_, j) => i >= j).forEach((kt, i) => {
this.connect(true, k, kt)
})
})
}
connect1() {
const nodes = this.props.nodes
let keys = Object.keys(nodes)
keys.filter((_, i) => i > 0).forEach((k, i) => {
this.connect(true, k, keys[0])
})
}
connectChain() {
const nodes = this.props.nodes
let keys = Object.keys(nodes)
keys.filter((_, i) => i > 0).forEach((k, i) => {
this.connect(true, k, keys[i])
})
}
2019-07-24 18:42:02 +00:00
render() {
const nodes = this.props.nodes
let keys = Object.keys(nodes)
const rows = keys.filter((_, i) => i > 0).map((k, i) => {
const cols = keys.filter((_, j) => i >= j).map((kt, i) => {
2019-07-25 00:10:52 +00:00
const checked = this.state.conns[`${k},${kt}`] === true
return (<td key={k + "," + kt}><input checked={checked} type="checkbox" onChange={e => this.connect(e.target.checked, k, kt)}/></td>)
})
return (
2019-07-25 00:10:52 +00:00
<tr key={k}><td>{k}</td>{cols}</tr>
)
})
2019-07-24 18:42:02 +00:00
return(
<Cristal title="Connection Manager">
<table>
2019-07-25 00:10:52 +00:00
<thead><tr><td></td>{keys.slice(0, -1).map((i) => (<td key={i}>{i}</td>))}</tr></thead>
<tbody>{rows}</tbody>
</table>
2019-07-25 00:10:52 +00:00
<div>
<button onClick={this.connectAll}>ConnAll</button>
<button onClick={this.connect1}>Conn1</button>
<button onClick={this.connectChain}>ConnChain</button>
</div>
2019-07-24 18:42:02 +00:00
</Cristal>
)
}
}
export default ConnMgr