This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community. Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it. https://www.freifunk-altdorf.de
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

241 lines
9.2 KiB

import styles from './style'
import React, { Component } from 'react';
import { Div, StyleSheet, Text, View, ScrollView, Alert, Button, TouchableHighlight, Image, Collapsile } from 'react-native';
import wifi from 'react-native-android-wifi';
import MapView from 'react-native-maps';
import { createStackNavigator } from 'react-navigation';
import { YellowBox } from 'react-native';
YellowBox.ignoreWarnings(['Warning: isMounted(...) is deprecated', 'Module RCTImageLoader']); //Silence Bug in React-Navigation
export default class NodeInfNavigation extends React.Component {
static navigationOptions = {
title: 'Node Info',
};
render() {
/* 2. Get the param, provide a fallback value if not available */
const { navigation } = this.props;
const dataATT = navigation.getParam('dataATT', 'NO-ID');
const currentBSSID = navigation.getParam('currentBSSID', 'NO');
const hostName = navigation.getParam('hostName', 'NO');
tryNextHop = () => {
for (var k2 in dataATT) {
if (dataATT.hasOwnProperty(k2)) {
// console.log('first Step ', k2)
if (dataATT[k2].nodeinfo.node_id == hopCurrent) {
hopsOnWay.push(dataATT[k2].nodeinfo.hostname);
localCloud.push(dataATT[k2].nodeinfo.node_id);
clientsLocal += dataATT[k2].statistics.clients;
if (dataATT[k2].statistics.gateway === dataATT[k2].statistics.gateway_nexthop) {
gatewayLastFound = true;
return;
}
else {
hopCurrent = dataATT[k2].statistics.gateway_nexthop;
return;
}
}
// ++count; //amount of nodes
}
};
console.log('Fehler: GatewayLastFound wurde manuell gesetzt');
gatewayLastFound = true;
return;
}
abc = () => {
return hopsOnWay.map(function (hop) {
return (
<Text> {hop} --></Text>
);
});
}
getAllClients = () => {
while (changed) {
changed = false;
console.log('------------------------');
tryGetAllClientes();
}
}
tryGetAllClientes = () => {
for (var k3 in dataATT) {
if (dataATT.hasOwnProperty(k3)) {
localCloud.map(function (hop) {
if (dataATT[k3].statistics.gateway_nexthop == hop) {
if (!localCloud.includes(dataATT[k3].nodeinfo.node_id)) {
localCloud.push(dataATT[k3].nodeinfo.node_id);
changed = true;
return;
}
}
})
}
}
}
countHopsOnWay = () => {
localCloud.map(function (hop) {
for (var k4 in dataATT) {
if (dataATT.hasOwnProperty(k4)) {
if (dataATT[k4].nodeinfo.node_id == hop) {
clientsGateway += dataATT[k4].statistics.clients;
}
}
}
})
}
var tn = currentBSSID;
var hn = hostName;
var count = 0;
var cNodeNr = 0;
var online = '';
var contact = '';
var hopCurrent = '';
var hopCurrentLocal = '';
var hopNext = '';
var hopsOnWay = [];
var localCloud = [];
var changed = true;
var amountHops = 0;
var clientsLocal = 0;
var clients = 0;
var gatewayLastFound = false;
var clientsGateway = 0;
hopsOnWay.push(hn);
for (var k in dataATT) {
if (dataATT.hasOwnProperty(k)) {
if (dataATT[k].nodeinfo.hostname === hn) {
//setting the current node number:
cNodeNr = k;
//setting contact;
contact = dataATT[k].nodeinfo.owner.contact;
//setting online status:
if (dataATT[k].flags.online) {
online = 'online';
} else {
online = 'offline';
}
clients = dataATT[k].statistics.clients;
clientsLocal += clients;
hopCurrent = dataATT[k].statistics.gateway;
hopCurrentLocal = hopCurrent;
hopNext = dataATT[k].statistics.gateway_nexthop;
localCloud.push(dataATT[k].nodeinfo.node_id);
console.log('Gateway 0: ', dataATT[k].statistics.gateway)
console.log('Gateway 0: ', dataATT[k].statistics.gateway_nexthop)
if (hopCurrent === hopNext) {
console.log('Sie sind direkt mit dem Gateway verbunden');
gatewayLastFound = true;
++amountHops;
}
hopCurrent = hopNext;
while (gatewayLastFound != true && amountHops < 10) {
console.log('gatewayLastFound in while loop: ', gatewayLastFound);
tryNextHop();
++amountHops;
}
console.log(localCloud);
getAllClients();
console.log('/n');
console.log('HOPS ON WAY // LOCAL CLOUD');
console.log(hopsOnWay);
countHopsOnWay();
console.log(localCloud);
console.log(currentBSSID);
// hopsOnWay.push('gw02.tecff.de');
}
++count; //amount of nodes
}
};
return (
<ScrollView contentContainerStyle={{ alignItems: 'center', justifyContent: 'flex-start', paddingTop: 70, }}>
<View style={styles.container2}>
<View style={styles.viewStyleTwo2}>
<Text style={styles.headlineText}>{hn}</Text>
</View>
</View>
<View style={styles.container2}>
<View style={styles.viewStyleOne}>
<Text style={styles.simpleTextb2}>Status:</Text>
</View>
<View style={styles.viewStyleTwo}>
<Text style={styles.textStyle}>{online}</Text>
</View>
</View>
<View style={styles.container2}>
<View style={styles.viewStyleOne}>
<Text style={styles.simpleTextb2}>Amount of nodes:</Text>
</View>
<View style={styles.viewStyleTwo}>
<Text style={styles.textStyle}>{count}</Text>
</View>
</View>
<View style={styles.container2}>
<View style={styles.viewStyleOne}>
<Text style={styles.simpleTextb2}>Contact:</Text>
</View>
<View style={styles.viewStyleTwo}>
<Text style={styles.textStyle}>{contact}</Text>
</View>
</View>
<View style={styles.container2}>
<View style={styles.viewStyleOne}>
<Text style={styles.simpleTextb2}>Current Node Nr:</Text>
</View>
<View style={styles.viewStyleTwo}>
<Text style={styles.textStyle}>{cNodeNr}</Text>
</View>
</View>
<View style={styles.container2}>
<View style={styles.viewStyleOne}>
<Text style={styles.simpleTextb2}>Gateway Hops:</Text>
</View>
<View style={styles.viewStyleTwo}>
<Text style={styles.textStyle}>{amountHops}</Text>
</View>
</View>
<View style={styles.container2}>
<View style={styles.viewStyleOne}>
<Text style={styles.simpleTextb2}>Gateways:</Text>
</View>
<View style={styles.viewStyleTwo}>
{abc()}
<Text> gw02.tecff.de</Text>
</View>
</View>
<View style={styles.container2}>
<View style={styles.viewStyleOne}>
<Text style={styles.simpleTextb2}>Clients:</Text>
</View>
<View style={styles.viewStyleTwo}>
<Text style={styles.textStyle}>{clients} Clients are on the current node</Text>
<Text>{clientsGateway} Clients till gateway</Text>
</View>
</View>
</ScrollView>
);
}
}