You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: on_connect.rs
    path of file: ./repos/snarkOS/node/tcp/src/protocols
    
    the code of the file until where you have to start completion: // Copyright (C) 2019-2023 Aleo Systems Inc.
// This file is part of the snarkOS library.

// Licensed under the Apache License, Version 2.0 (the "License");
// 
    
    async fn enable_on_connect(&self) {
        let (from_node_sender, mut from_node_receiver) = mpsc::unbounded_channel::<(SocketAddr, oneshot::Sender<()>)>();

        // use a channel to know when the on_connect task is ready
        let (tx, rx) = oneshot::channel::<()>();

        // spawn a background task dedicated to executing the desired post-handshake actions
        let self_clone = self.clone();
        let on_connect_task = tokio::spawn(async move {
            trace!(parent: self_clone.tcp().span(), "spawned the OnConnect handler task");
            if tx.send(()).is_err() {
                error!(parent: self_clone.tcp().span(), "OnConnect handler creation interrupted! shutting down the node");
                self_clone.tcp().shut_down().await;
                return;
            }

            while let Some((addr, notifier)) = from_node_receiver.recv().await {
                let self_clone2 = self_clone.clone();
                tokio::spawn(async move {
                    // perform the specified initial actions
                    self_clone2.on_connect(addr).await;
                    // notify the node that the initial actions have concluded
                    let _ = notifier.send(()); // can't really fail
                });
            }
        });
        let _ = rx.await;
        self.tcp().tasks.lock().push(on_connect_task);

        // register the OnConnect handler with the Node
        let hdl = Box::new(ProtocolHandler(from_node_sender));
        assert!(self.tcp().protocols.on_connect.set(hdl).is_ok(), "the OnConnect protocol was enabled more than once!");
    }