diff --git a/cs654/proj1/KaZaGUI.java b/cs654/proj1/KaZaGUI.java index 14e8694..8f9f7cf 100644 --- a/cs654/proj1/KaZaGUI.java +++ b/cs654/proj1/KaZaGUI.java @@ -181,7 +181,8 @@ public class KaZaGUI extends JFrame if (m_server != null) { m_server.connectToPeerGroupLeader( - m_serverPeerAddressField.getText()); + m_serverPeerAddressField.getText(), + true); m_serverPeerAddressField.setText(""); } } diff --git a/cs654/proj1/KaZaServer.java b/cs654/proj1/KaZaServer.java index e44ddd0..fd68555 100644 --- a/cs654/proj1/KaZaServer.java +++ b/cs654/proj1/KaZaServer.java @@ -38,19 +38,34 @@ public class KaZaServer implements Runnable } } - public void connectToPeerGroupLeader(String peerName) + public void connectToPeerGroupLeader(String peerName, + boolean sendReverseConnectMsg) { + /* check if the peer group leader is already in our list */ + synchronized (m_peerGroupLeaders) + { + for (Socket s : m_peerGroupLeaders) + { + if (s.getInetAddress().getHostAddress().equals(peerName)) + return; + } + } + Socket s; try { s = new Socket(peerName, LISTEN_PORT); DataOutputStream os = new DataOutputStream(s.getOutputStream()); os.writeBytes("HELO KaZaServer\n"); + if (sendReverseConnectMsg) + os.writeBytes("GRPL\n"); } catch (Exception e) { return; } + + /* add new peer group leader to the peer group leaders list */ synchronized (m_peerGroupLeaders) { m_peerGroupLeaders.add(s); @@ -193,6 +208,12 @@ public class KaZaServer implements Runnable m_socket.close(); running = false; } + else if (opCode.equals("GRPL")) + { + /* user is a peer group leader, initiate a connection + * to it if one is not established */ + connectToPeerGroupLeader(m_clientIP, false); + } } } catch (Exception e) { }