Exemple #1
0
 //Start the discovery process.
 public void HandshakeStatusUpdated(SignaledPeer.ConnectionStateMachine state)
 {
     Log.Information("Handshake Status Updated to {status}", state);
     if (state == SignaledPeer.ConnectionStateMachine.NOMINAL)
     {
         this.RpcId(HandshakePeer.UID, nameof(GetPeerUIDs));
         HandshakePeer = null;
         //handshake peer no longer needs to be it's own variable.
         //It's just one of the peers we have now.
     }
 }
 public void Init(SignaledPeer peer, NetworkingMenu menu)
 {
     this.peer          = peer;
     clickableName.Text = peer.UID.ToString("X4");
     peer.Connect(nameof(SignaledPeer.StatusUpdated), this, nameof(OnStatusChanged));
     OnStatusChanged(peer.CurrentState);
     clickableName.Connect("pressed", menu, nameof(NetworkingMenu.SelectItem),
                           new Godot.Collections.Array {
         this
     });
     peer.Connect(nameof(SignaledPeer.Delete), this, "queue_free");
 }
    public void OnPeerAdded(SignaledPeer peer)
    {
        PackedScene scene    = GD.Load <PackedScene>("res://addons/PurePeerSignaling/PeerItem.tscn");
        PeerItem    peerItem = (PeerItem)scene.Instance();

        PeerList.AddChild(peerItem);
        peerItem.Init(peer, this);
        if (peer.CurrentState == SignaledPeer.ConnectionStateMachine.MANUAL)
        {
            SelectItem(peerItem);
            Log.Information("manual peer selected; {UID}", peer.UID);
        }
    }
Exemple #4
0
    public SignaledPeer CreateSignaledPeer(int UID, SignaledPeer.ConnectionStateMachine startingState, bool _initiator)
    {
        var peer = new SignaledPeer(UID, this, startingState, PollTimer, _initiator);

        Log.Information("New Peer: {UID} state: {S}", peer.UID, startingState);
        SignaledPeers.Add(UID, peer);
        RTCMP.AddPeer(peer.PeerConnection, UID);

        peer.Connect(nameof(SignaledPeer.Delete), this, nameof(RemoveSignaledPeer),
                     new Godot.Collections.Array {
            UID
        });
        EmitSignal(nameof(PeerAdded), peer);
        return(peer);
    }
Exemple #5
0
    public void AddPeers(byte[] packet)
    {
        int        referrer = GetTree().GetRpcSenderId();
        List <int> newPeers = MessagePackSerializer.Deserialize <List <int> >(packet);

        foreach (int uid in newPeers)
        {
            //add them if we don't already have them.
            if (!SignaledPeers.ContainsKey(uid) && !(uid == RTCMP.GetUniqueId()))
            {
                GD.Print("ADDING THIS PEER: ", uid);
                SignaledPeer newPeer = CreateSignaledPeer(uid, SignaledPeer.ConnectionStateMachine.RELAY_SEARCH, true);
                UnsearchedPeers.Add(uid);
            }
        }
    }
Exemple #6
0
    public void JoinMesh(byte[] packet)
    {
        //first you need to remove yourself from the current mesh.
        RTCMP.Close();
        SignaledPeers = new Dictionary <int, SignaledPeer>();

        SignaledPeer.Offer incomingOffer = MessagePackSerializer.Deserialize <SignaledPeer.Offer>(packet);

        RTCMP.Initialize(incomingOffer.assignedUID);

        HandshakePeer = CreateSignaledPeer(incomingOffer.UID, SignaledPeer.ConnectionStateMachine.MANUAL, false);
        HandshakePeer.Connect(nameof(SignaledPeer.StatusUpdated), this, nameof(HandshakeStatusUpdated));
        HandshakePeer.PeerConnection.SetRemoteDescription(incomingOffer.type, incomingOffer.sdp);

        foreach (SignaledPeer.BufferedCandidate c in incomingOffer.ICECandidates)
        {
            HandshakePeer.BufferIceCandidate(c);
        }

        EmitSignal(nameof(ConnectedToSession), incomingOffer.assignedUID);
    }
 public NodeStatus(SignaledPeer peer)
 {
     this.peer = peer;
 }