浏览代码

Improve application base class signature

Billy Barrow 3 年之前
父节点
当前提交
044f03f636
共有 2 个文件被更改,包括 28 次插入22 次删除
  1. 27 20
      src/lib/Application/Application.vala
  2. 1 2
      src/toys/hello_world/Main.vala

+ 27 - 20
src/lib/Application/Application.vala

@@ -15,30 +15,37 @@ namespace LibPeer {
         protected Instance instance { get; private set; }
         protected Network[] networks { get; private set; }
 
-        public abstract string application_namespace { get; }
+        protected bool is_initialised { get; private set; }
 
         construct {
+            is_initialised = false;
             muxer = new Muxer ();
-            
-            networks = configure_networks();
-            discoverer = new ApplicationInformationProtocol(muxer);
-            
-            foreach (var network in networks) {
-                network.bring_up();
-                discoverer.add_network (network);
-            }
-
-            instance = muxer.create_instance (application_namespace);
-            information = new ApplicationInformation.from_instance (instance);
-            information.new_group_peer.connect(on_new_discovery_peer);
-            instance.incoming_greeting.connect(on_peer_available);
-            transport = new StreamTransmissionProtocol(muxer, instance);
-            transport.incoming_stream.connect(on_incoming_stream);
-            discoverer.add_application (information);
         }
-
-        protected virtual Network[] configure_networks() {
-            return new Network[] { new IPv4.IPv4("0.0.0.0", IPv4.IPv4.find_free_port("0.0.0.0")) };
+        
+        protected void initialise(string application_namespace, Network[]? network_list = null) {
+            lock(is_initialised) {
+                if(is_initialised) {
+                    warning("Application already initialised, skipping");
+                    return;
+                }
+
+                discoverer = new ApplicationInformationProtocol(muxer);
+                networks = network_list ?? new Network[] { new IPv4.IPv4("0.0.0.0", IPv4.IPv4.find_free_port("0.0.0.0")) };
+                
+                foreach (var network in networks) {
+                    network.bring_up();
+                    discoverer.add_network (network);
+                }
+    
+                instance = muxer.create_instance (application_namespace);
+                information = new ApplicationInformation.from_instance (instance);
+                information.new_group_peer.connect(on_new_discovery_peer);
+                instance.incoming_greeting.connect(on_peer_available);
+                transport = new StreamTransmissionProtocol(muxer, instance);
+                transport.incoming_stream.connect(on_incoming_stream);
+                discoverer.add_application (information);
+                is_initialised = true;
+            }
         }
 
         protected virtual void on_new_discovery_peer() {

+ 1 - 2
src/toys/hello_world/Main.vala

@@ -9,10 +9,9 @@ namespace HelloWorldApp {
 
         private uint8[] message = new uint8[] { 'H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd', '!' };
 
-        public override string application_namespace { get { return "hello-world"; }}
-
         public static int main(string[] args) {
             var t = new Main();
+            t.initialise("hello-world");
             while (true) {};
             return 0;
         }