示例#1
0
 public static void ConnectToPeer(HumbleNet.PeerId peer)
 {
     if (peer != _myPeer && !_pendingPeers.Contains(peer) && !_remotePlayers.ContainsKey(peer))
     {
         _pendingPeers.Add(peer);
     }
 }
示例#2
0
 void processKnownPeers(TestClient.HelloPeer message)
 {
     for (var i = 0; i < message.PeersLength; ++i)
     {
         HumbleNet.PeerId newPeer = (HumbleNet.PeerId)message.GetPeers(i);
         connectToPeer(newPeer);
     }
 }
示例#3
0
 void connectToPeer(HumbleNet.PeerId peer)
 {
     if (peer != myPeer && !pendingPeers.Contains(peer) && !connectedPeers.Contains(peer))
     {
         Console.WriteLine("Connecting to Peer {0}", peer);
         pendingPeers.Insert(0, peer);
     }
 }
示例#4
0
 public static void AddConnectedPeer(HumbleNet.PeerId peer, GameObject obj)
 {
     _pendingPeers.Remove(peer);
     if (!_remotePlayers.ContainsKey(peer))
     {
         _remotePlayers.Add(peer, obj);
     }
 }
示例#5
0
 void connectedToPeer(HumbleNet.PeerId peer)
 {
     pendingPeers.Remove(peer);
     if (!connectedPeers.Contains(peer))
     {
         Console.WriteLine("Connected to Peer {0}", peer);
         connectedPeers.Insert(0, peer);
     }
 }
示例#6
0
 private void CheckPeer()
 {
     if (_myPeer.isInvalid())
     {
         _myPeer = HumbleNetAPI.myPeer;
         if (_myPeer.isValid())
         {
             peerIdText.text = string.Format("Peer ID: {0}", _myPeer);
         }
     }
 }
示例#7
0
    public static bool SendHello(HumbleNet.PeerId peer, bool is_response = false)
    {
        var fbb        = new FlatBufferBuilder(16);
        var knownPeers = buildKnownPeers(fbb);
        var hello      = Networking.HelloPeer.CreateHelloPeer(fbb, knownPeers, is_response);
        var msg        = Networking.Message.CreateMessage(fbb, Networking.MessageSwitch.HelloPeer, hello.Value);

        Networking.Message.FinishMessageBuffer(fbb, msg);

        return(HumbleNet.P2P.SendTo(getFlatBufferData(fbb), peer, HumbleNet.SendMode.SEND_RELIABLE, CHANNEL) >= 0);
    }
示例#8
0
    bool sendHello(HumbleNet.PeerId peer)
    {
        Console.WriteLine("Try Hello {0}", peer);
        var fbb = new FlatBufferBuilder(1);

        var knownPeers = buildKnownPeers(fbb);
        var pos        = TestClient.HelloPeer.CreateHelloPeer(fbb, knownPeers);
        var outmsg     = TestClient.Message.CreateMessage(fbb, TestClient.MessageSwitch.HelloPeer, pos.Value);

        TestClient.Message.FinishMessageBuffer(fbb, outmsg);

        return(sendMessage(peer, getFlatBufferData(fbb)) >= 0);
    }
示例#9
0
    static public void Shutdown()
    {
#if !UNITY_WEBGL && USE_THREAD
        Poller.Shutdown();
#endif
        if (_isInitialized)
        {
            HumbleNet.Shutdown();
            _isInitialized = false;
            _isConnected   = false;
            _myPeer        = HumbleNet.PeerId.Invalid;
        }
    }
示例#10
0
 public static void DropPeer(HumbleNet.PeerId peer)
 {
     Console.WriteLine("Dropping peer: {0}", peer);
     // peer disconnected so we should remove them from the available peers.
     if (_remotePlayers.ContainsKey(peer))
     {
         GameObject obj = _remotePlayers[peer];
         _remotePlayers.Remove(peer);
         Destroy(obj);
     }
     _pendingPeers.Remove(peer);
     HumbleNet.P2P.DisconnectPeer(peer);
 }
示例#11
0
    // Use this for initialization
    static public void Init(string server)
    {
        if (!_isInitialized)
        {
            _myPeer = HumbleNet.PeerId.Invalid;
            if (!HumbleNet.Init())
            {
                throw new System.DllNotFoundException(string.Format("Could not locate HumbleNet! : {0}", HumbleNet.getError()));
            }
            HumbleNet.P2P.Initialize(server, "WebGLRoller", "<WebGLRoller secret>", null);
            HumbleNet.P2P.Wait(0);

#if !UNITY_WEBGL && USE_THREAD
            Poller.Init();
#endif
            _isInitialized = true;
        }
    }
示例#12
0
    void processMessage(HumbleNet.PeerId peer, byte[] data)
    {
        var bb  = new ByteBuffer(data);
        var msg = TestClient.Message.GetRootAsMessage(bb);

        switch (msg.MessageType)
        {
        case TestClient.MessageSwitch.HelloPeer: {
            var hello = (TestClient.HelloPeer)msg.GetMessage(new TestClient.HelloPeer());
            Console.WriteLine("Received hello from peer {0} response {1}", peer, hello.IsResponse);

            connectedToPeer(peer);

            processKnownPeers(hello);


            if (!hello.IsResponse)
            {
                var fbb = new FlatBufferBuilder(1);

                var knownPeers = buildKnownPeers(fbb);
                var pos        = TestClient.HelloPeer.CreateHelloPeer(fbb, knownPeers, true);
                var outmsg     = TestClient.Message.CreateMessage(fbb, TestClient.MessageSwitch.HelloPeer, pos.Value);
                TestClient.Message.FinishMessageBuffer(fbb, outmsg);

                sendMessage(peer, getFlatBufferData(fbb));
            }
        }
        break;

        case TestClient.MessageSwitch.Chat: {
            var chat = (TestClient.Chat)msg.GetMessage(new TestClient.Chat());
            Console.WriteLine("Peer {0}: {1}", peer, chat.Message);
        }
        break;

        default:
            Console.WriteLine("Unexpected message {0}", msg.MessageType);
            break;
        }
    }
示例#13
0
 int sendMessage(HumbleNet.PeerId peer, byte[] data)
 {
     return(HumbleNet.P2P.SendTo(data, peer, HumbleNet.SendMode.SEND_RELIABLE, CHANNEL));
 }
示例#14
0
    bool Run()
    {
        HumbleNet.P2P.Wait(100);

        if (myPeer.isInvalid())
        {
            myPeer = HumbleNet.P2P.getMyPeerId();
            if (myPeer.isValid())
            {
                Console.WriteLine("My Peer is {0}", myPeer);
                connected = true;
            }
        }

        if (connected)
        {
            List <HumbleNet.PeerId> toRemove = null;

            bool done = false;
            while (!done)
            {
                byte[] data;

                HumbleNet.PeerId otherPeer;
                if (HumbleNet.P2P.RecvFrom(out data, out otherPeer, CHANNEL) > 0)
                {
                    processMessage(otherPeer, data);
                }
                else if (otherPeer.isValid())
                {
                    if (toRemove == null)
                    {
                        toRemove = new List <HumbleNet.PeerId>();
                    }
                    toRemove.Insert(0, otherPeer);
                }
                else
                {
                    done = true;
                }
            }

            DateTime now = DateTime.UtcNow;

            var span = now.Subtract(last);
            if (span.TotalSeconds > 1)
            {
                foreach (var peer in pendingPeers)
                {
                    if (!sendHello(peer))
                    {
                        if (toRemove == null)
                        {
                            toRemove = new List <HumbleNet.PeerId>();
                        }
                        toRemove.Insert(0, peer);
                    }
                }
                last = now;
            }

            // disconnect lost peers
            if (toRemove != null)
            {
                foreach (var peer in toRemove)
                {
                    disconnectPeer(peer);
                }
            }
        }
        return(_running);
    }
示例#15
0
 void disconnectPeer(HumbleNet.PeerId peer)
 {
     Console.WriteLine("Disconnecting Peer {0}", peer);
     pendingPeers.Remove(peer);
     connectedPeers.Remove(peer);
 }