//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); } }
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); }
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); } } }
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; }