Esempio n. 1
0
 public void AddHelloMesssage(HelloMessage helloMessage, PeerToPeerConnection connection)
 {
     Debug.Log("Manager of " + myClientName + ": Received Hello message from: " + helloMessage.name);
     sockets.Add(helloMessage.name, connection);
     peers.Add(helloMessage.name, helloMessage.ipAndPort);
     AddIncommingMessage(helloMessage);
 }
Esempio n. 2
0
    private void ConnectToExistingPeers()
    {
        Debug.Log("Manager of " + myClientName + ": connect to existing peer: " + ipOfFirstPeerConnecton + " at port = " + remotePort);
        //verbindung zu einem peer
        connectionToFirstPeer = new PeerToPeerClient(this, ipOfFirstPeerConnecton, remotePort, "");



        //2.zu zuvor definierten ip verbindung aufbauen(remote server)

        //get ips and ports of all servers

        Thread.Sleep(1000);
        Debug.Log("should send message get Peers now!");
        connectionToFirstPeer.SendGetPeers();
    }
Esempio n. 3
0
    private bool WaitForConnection(PeerToPeerConnection client)
    {
        int secondsWaiting   = 0;
        int secondsWaitLimit = 10;

        while (false) // !is.connected()
        {
            Thread.Sleep(1000);
            secondsWaiting++;
            if (secondsWaiting > 1)
            {
                Debug.LogWarning("Manager of " + myClientName + ": Still waiting for connection of first client (since " + secondsWaiting + " Seconds");
            }
            if (secondsWaiting > secondsWaitLimit)
            {
                Debug.LogWarning("Manager of " + myClientName + ": stopped waiting after " + secondsWaiting + " Seconds!!!");
                return(false);
            }
        }
        return(true);
    }
Esempio n. 4
0
    private void HandlePeersMessage(PeersMessage peersMessage)
    {
        Debug.Log("handling peers message!");
        //parsed message should contain a dictionary
        //iteratate through it and send hello message to each node
        if (peersMessage.peers == null)
        {
            Debug.Log("Manager of " + myClientName + ": Received empty peers message");
            return;
        }

        foreach (KeyValuePair <string, string> entry in peersMessage.peers)
        {
            string playerName = entry.Key;
            string ipAndPort  = entry.Value;

            string[] splits = ipAndPort.Split(':');
            string   ip     = splits[0];
            int      port   = Int32.Parse(splits[1]);

            Debug.Log("received ip = " + ip + " first ip = " + ipOfFirstPeerConnecton + " received port = " + port + " fist port = " + remotePort);

            if (ip.Equals(ipOfFirstPeerConnecton) && port == remotePort)
            {
                sockets.Add(playerName, connectionToFirstPeer);
                peers.Add(playerName, ipAndPort);
                connectionToFirstPeer.clientName = playerName;
                Debug.Log("added first peer to dictionaries");
                connectionToFirstPeer = null;
            }
            else
            {
                if (!peers.ContainsKey(playerName))
                {
                    PeerToPeerClient anotherClient = new PeerToPeerClient(this, ip, port, playerName);
                    sockets.Add(playerName, anotherClient);
                    peers.Add(playerName, ipAndPort);
                    Debug.Log("Manager of " + myClientName + ": Added new Player to known peers: " + playerName + " - " + ipAndPort);
                }
            }

            // do something with entry.Value or entry.Key
        }
        //now send hello message
        Debug.Log("Manager of " + myClientName + ": sending hello message known peers: " + string.Join(";", peers));
        HelloMessage helloMessage = new HelloMessage(myClientName, playersPosition, peers[myClientName]);

        Thread.Sleep(5000);
        foreach (KeyValuePair <string, PeerToPeerConnection> entry in sockets)
        {
            Debug.Log("Manager of " + myClientName + ": sending hello message to " + entry.Key);

            entry.Value.CreateAndSendMessage(helloMessage);
        }
        //annahme jetzt kennen mich einfach alle #fame
        //seclect one randomly and ask for world model
        List <string> keyList = new List <string>(sockets.Keys);

        System.Random rand      = new System.Random();
        string        randomKey = keyList[rand.Next(keyList.Count)];

        Debug.Log("sending get state message to " + randomKey);
        sockets[randomKey].SendGetState();
        //ask everybody for position

        /*OPTIONAL START!(gilt nicht für erste instanz)
         *
         *
         * 3.sendden einer hello message mit eigenen spielernamen(nee erst wenn alle verbindungen aufgebaut sind?)
         * 4.senden eines getip -> getPeers an obigen server -> liefert ips UND PORTS!
         * 5.beim erhalt der ips über einen peerToPeer client
         * a) Aufbau einer client verbindung zu jeder erhaltenen ip adresse
         * b) senden einer hello nachricht an jede der aufgebauten sockts
         * b) Spielerposition kommt als Antwort auf hello Nachricht
         *
         * OPTIONAL ENDE!
         * */
    }