private void HandleGetPeersMessage(string message) { Debug.Log("P2PConnection: handle get peers message"); PeersMessage peersMessage = new PeersMessage(peerToPeerManager.peers); Debug.Log("# of known peers = " + peerToPeerManager.peers.Count); CreateAndSendMessage(peersMessage); Debug.LogWarning("P2PConnection: message sent!"); }
private void HandlePeersMessage(string peersMessage) { Debug.LogWarning("P2PConnection: handle peers message"); //PeersMessage peersMessage = JsonUtility.FromJson<PeersMessage>(message); JObject jObj = JObject.Parse(peersMessage); JToken peersToken = jObj.GetValue("peers"); PeersMessage peersMessageInstance = new PeersMessage(JsonConvert.DeserializeObject <Dictionary <string, string> >(peersToken.ToString())); Debug.Log("P2PConnection: peers message content = " + peersMessageInstance.ToString()); peerToPeerManager.AddIncommingMessage(peersMessageInstance); //peerToPeerManager.AddIncommingMessage(peersMessage); }
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! * */ }