diff --git a/lib/globals.dart b/lib/globals.dart deleted file mode 100644 index 14e3269..0000000 --- a/lib/globals.dart +++ /dev/null @@ -1,20 +0,0 @@ -library; - -import "package:nt4/nt4.dart"; - -NT4Client ntClient = NT4Client(serverBaseAddress: '10.5.78.2', onConnect: () { print("NT4 Connected"); }, onDisconnect: () { print("NT4 Disconnected"); }); - -Map nt4Subscriptions = {}; - -NT4Subscription subscribe(String topic){ - - if (!nt4Subscriptions.containsKey(topic)) - { - NT4Subscription subscrip = ntClient.subscribe(topic, NT4SubscriptionOptions()); - nt4Subscriptions[topic] = subscrip; - } - - return nt4Subscriptions[topic]!; -} - -List nt4Topics = []; diff --git a/lib/main.dart b/lib/main.dart index e3bdf04..82dc463 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,12 +1,16 @@ +import 'package:helm/ntutils.dart'; + import 'pages/dashboard.dart'; import 'package:flutter/material.dart'; void main() { - runApp(const MyApp()); + runApp(MyApp()); } class MyApp extends StatelessWidget { - const MyApp({super.key}); + MyApp({super.key}){ + NTUtils().connect("10.5.78.2"); + } // This widget is the root of your application. @override diff --git a/lib/ntutils.dart b/lib/ntutils.dart new file mode 100644 index 0000000..c6c02ca --- /dev/null +++ b/lib/ntutils.dart @@ -0,0 +1,59 @@ +import "package:nt4/nt4.dart"; + +class NTUtils{ + + static final NTUtils _instance = NTUtils._internal(); + + factory NTUtils() { + return _instance; + } + + bool isConnected = false; + bool _isAttemptingToConnect = false; + String _serverAddress = ""; + + NT4Client? ntClient; + + final Map _nt4Subscriptions = {}; + + void connect(String serverAddress){ + _serverAddress = serverAddress; + _isAttemptingToConnect = true; + ntClient = NT4Client(serverBaseAddress: serverAddress, onConnect: () { isConnected = true; _isAttemptingToConnect = false; }, onDisconnect: () { isConnected = false; }); + } + + String connectionStatus(){ + if(_isAttemptingToConnect){ + return "Attempting to connect to $_serverAddress"; + } + if(isConnected){ + return "Connected"; + }else{ + return "Not Connected"; + } + } + + NT4Subscription subscribe(String topic){ + if (!_nt4Subscriptions.containsKey(topic)) + { + NT4Subscription subscrip = ntClient!.subscribe(topic, NT4SubscriptionOptions()); + _nt4Subscriptions[topic] = subscrip; + } + + return _nt4Subscriptions[topic]!; + } + + final Map _nt4Topics = {}; + + NT4Topic getPublicTopic(String topic, String type){ + if(!_nt4Topics.containsKey(topic)){ + NT4Topic top = ntClient!.publishNewTopic(topic, type); + _nt4Topics[topic] = top; + } + + return _nt4Topics[topic]!; + } + + NTUtils._internal(); +} + diff --git a/lib/pages/dashboard.dart b/lib/pages/dashboard.dart index ba3475f..d821891 100644 --- a/lib/pages/dashboard.dart +++ b/lib/pages/dashboard.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:helm/ntutils.dart'; import 'package:helm/widgets/base_card.dart'; import 'package:responsive_grid/responsive_grid.dart'; import '../widgets/text_card.dart'; @@ -22,7 +23,7 @@ class Dashboard extends StatelessWidget { backgroundColor: Theme.of(context).colorScheme.inversePrimary, // Here we take the value from the MyHomePage object that was created by // the App.build method, and use it to set our appbar title. - title: Text("Helm"), + title: Text("Helm - ${NTUtils().connectionStatus()}"), ), body: ResponsiveGridRow( children: [ diff --git a/lib/widgets/text_card.dart b/lib/widgets/text_card.dart index 99e2e21..4dc15eb 100644 --- a/lib/widgets/text_card.dart +++ b/lib/widgets/text_card.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import './base_card.dart'; import 'package:nt4/nt4.dart'; -import '../globals.dart' as glob; +import 'package:helm/ntutils.dart'; class TextCard extends StatefulWidget { const TextCard({ @@ -31,8 +31,10 @@ class _TextCardState extends State { @override Widget build(BuildContext context) { - NT4Subscription sub = glob.subscribe(widget.ntTopic!); - sub.listen( (data) => setVal(data.toString()) ); + if(NTUtils().isConnected){ + NT4Subscription sub = NTUtils().subscribe(widget.ntTopic!); + sub.listen( (data) => setVal(data.toString()) ); + } return BaseCard( cardTitle: widget.cardTitle,