mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-28 02:11:40 +00:00
Allow arbitrary networktables address (#764)
* Allow specifying NT server address by ip.
This commit is contained in:
@@ -81,7 +81,7 @@
|
||||
</v-list-item-title>
|
||||
<router-link v-if="!$store.state.settings.networkSettings.runNTServer" to="settings" class="accent--text"
|
||||
@click="switchToSettingsTab">
|
||||
Team number is {{ $store.state.settings.networkSettings.teamNumber }}
|
||||
NT server is {{ $store.state.settings.networkSettings.ntServerAddress }}
|
||||
</router-link>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
@@ -151,7 +151,7 @@ export default {
|
||||
computed: {
|
||||
needsTeamNumberSet: {
|
||||
get() {
|
||||
return this.$store.state.settings.networkSettings.teamNumber < 1
|
||||
return this.$store.state.settings.networkSettings.ntServerAddress == ""
|
||||
&& this.teamNumberDialog && this.$store.state.backendConnected
|
||||
&& !this.$route.name.toLowerCase().includes("settings");
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ export default new Vuex.Store({
|
||||
hardwarePlatform: "Unknown",
|
||||
},
|
||||
networkSettings: {
|
||||
teamNumber: 0,
|
||||
ntServerAddress: "",
|
||||
|
||||
supported: true,
|
||||
// Below options are only configurable if supported is true
|
||||
|
||||
@@ -475,7 +475,7 @@ export default {
|
||||
},
|
||||
showNTWarning: {
|
||||
get() {
|
||||
return (!this.$store.state.ntConnectionInfo.connected || this.$store.state.settings.networkSettings.runNTServer) && this.$store.state.settings.networkSettings.teamNumber > 0 && this.$store.state.backendConnected && !this.hideNTWarning;
|
||||
return (!this.$store.state.ntConnectionInfo.connected || this.$store.state.settings.networkSettings.runNTServer) && this.$store.state.settings.networkSettings.ntServerAddress != "" && this.$store.state.backendConnected && !this.hideNTWarning;
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
@@ -4,21 +4,21 @@
|
||||
ref="form"
|
||||
v-model="valid"
|
||||
>
|
||||
<CVnumberinput
|
||||
v-model="teamNumber"
|
||||
<CVinput
|
||||
v-model="ntServerAddress"
|
||||
:input-cols="inputCols"
|
||||
:disabled="settings.runNTServer"
|
||||
name="Team Number"
|
||||
:rules="[v => (v > 0) || 'Team number must be greater than zero', v => (v < 10000) || 'Team number must have fewer than five digits']"
|
||||
class="mb-4"
|
||||
:label-cols="$vuetify.breakpoint.mdAndUp ? undefined : 5"
|
||||
tooltip="enter the team number or the IP address of the robot NetworkTables server"
|
||||
:rules="[v => isValidTeamNumber(v) || 'Team Number must be non blank and a team number, IP address, or hostname']"
|
||||
/>
|
||||
<v-banner
|
||||
v-show="(teamNumber < 1 || teamNumber > 10000) && !runNTServer"
|
||||
v-show="!isValidTeamNumber(ntServerAddress) && !runNTServer"
|
||||
rounded
|
||||
color="red"
|
||||
text-color="white"
|
||||
>
|
||||
Team number is unset or invalid. NetworkTables will not be able to connect.
|
||||
Team Number unset or invalid. NetworkTables will not be able to connect.
|
||||
</v-banner>
|
||||
<CVradio
|
||||
v-show="$store.state.settings.networkSettings.shouldManage"
|
||||
@@ -36,6 +36,7 @@
|
||||
name="IP"
|
||||
/>
|
||||
<CVinput
|
||||
v-show="$store.state.settings.networkSettings.shouldManage"
|
||||
v-model="hostname"
|
||||
:input-cols="inputCols"
|
||||
:rules="[v => isHostname(v) || 'Invalid hostname']"
|
||||
@@ -165,7 +166,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import CVnumberinput from '../../components/common/cv-number-input'
|
||||
import CVradio from '../../components/common/cv-radio'
|
||||
import CVinput from '../../components/common/cv-input'
|
||||
import CVSwitch from "@/components/common/cv-switch";
|
||||
@@ -174,12 +174,13 @@ import CVSwitch from "@/components/common/cv-switch";
|
||||
const ipv4Regex = /^((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])$/;
|
||||
// https://stackoverflow.com/a/18494710
|
||||
const hostnameRegex = /^([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)+(\.([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*))*$/;
|
||||
const teamNumberRegex = /^[1-9][0-9]{0,3}$/;
|
||||
const badTeamNumberRegex = /^[0-9]{5,}$/;
|
||||
|
||||
export default {
|
||||
name: 'Networking',
|
||||
components: {
|
||||
CVSwitch,
|
||||
CVnumberinput,
|
||||
CVradio,
|
||||
CVinput
|
||||
},
|
||||
@@ -205,12 +206,12 @@ export default {
|
||||
settings() {
|
||||
return this.$store.state.settings.networkSettings;
|
||||
},
|
||||
teamNumber: {
|
||||
ntServerAddress: {
|
||||
get() {
|
||||
return this.settings.teamNumber
|
||||
return this.settings.ntServerAddress
|
||||
},
|
||||
set(value) {
|
||||
this.$store.commit('mutateNetworkSettings', {['teamNumber']: value || 0});
|
||||
this.$store.commit('mutateNetworkSettings', {['ntServerAddress']: value || ""});
|
||||
}
|
||||
},
|
||||
runNTServer: {
|
||||
@@ -247,6 +248,16 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
isValidTeamNumber(v) {
|
||||
if (teamNumberRegex.test(v)) return true;
|
||||
if (ipv4Regex.test(v)) return true;
|
||||
// need to check these before the hostname. "0" and "99999" are valid hostnames,
|
||||
// but we don't want to allow then
|
||||
if (v == '0') return false;
|
||||
if (badTeamNumberRegex.test(v)) return false;
|
||||
if (hostnameRegex.test(v)) return true;
|
||||
return false;
|
||||
},
|
||||
isIPv4(v) {
|
||||
return ipv4Regex.test(v);
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user