diff options
author | cirakg <ciraboxkg@gmail.com> | 2022-12-30 05:46:35 +0100 |
---|---|---|
committer | cirakg <ciraboxkg@gmail.com> | 2022-12-30 05:46:35 +0100 |
commit | 71eac283af1b69d1f665a83a0dd251d095cfb235 (patch) | |
tree | 53f583d3832fb98e6cf84b76ba495baac3a57351 /src/main | |
parent | 110a2354cff010f88b59dbb302192fce0cc6a9ac (diff) |
Slanje available korisnika svaki put kad se desi promena na serveru. Dodate provere za prekidanje konekcije. Kod premesten iz panela u MainFrame.
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/pokemon/Server.java | 52 | ||||
-rw-r--r-- | src/main/java/ui/ChooseOpponentPanel.java | 23 | ||||
-rw-r--r-- | src/main/java/ui/LoginPanel.java | 29 | ||||
-rw-r--r-- | src/main/java/ui/MainFrame.java | 70 |
4 files changed, 106 insertions, 68 deletions
diff --git a/src/main/java/pokemon/Server.java b/src/main/java/pokemon/Server.java index ba8b3eb..3da6629 100644 --- a/src/main/java/pokemon/Server.java +++ b/src/main/java/pokemon/Server.java @@ -92,13 +92,24 @@ public class Server implements Runnable { SocketChannel sc = (SocketChannel) key.channel(); StringBuilder sb = new StringBuilder(); int read=0; - while( (read=sc.read(bb)) > 0 ) - { - bb.flip(); - byte[] bytes = new byte[bb.limit()]; - bb.get(bytes); - sb.append(new String(bytes)); - bb.clear(); + try { + while( (read=sc.read(bb)) > 0 ) + { + bb.flip(); + byte[] bytes = new byte[bb.limit()]; + bb.get(bytes); + sb.append(new String(bytes)); + bb.clear(); + } + + } catch (Exception e) { + Long closedId=players.get(sc); + players.remove(sc); + System.out.println("Client dissconnected: "+closedId ); + System.out.println("Remaining clients: "+players.size() ); + sc.close(); + sendAvailablePlayers(); + return; } if(read==-1) { @@ -107,6 +118,7 @@ public class Server implements Runnable { System.out.println("Client dissconnected: "+closedId ); System.out.println("Remaining clients: "+players.size() ); sc.close(); + sendAvailablePlayers(); return; } System.out.println(sb.toString()); @@ -128,6 +140,7 @@ public class Server implements Runnable { players.put(sc,res.id); ByteBuffer buff = ByteBuffer.wrap(message.getBytes()); sc.write(buff); + sendAvailablePlayers(); } @@ -163,11 +176,26 @@ public class Server implements Runnable { bb.clear(); sc.register(selector, SelectionKey.OP_READ, address); - - - - - + } + public void sendAvailablePlayers() throws Exception{ + System.out.println("PlayerAddedRemovedOrJoinedGame"); + for(Entry<SocketChannel, Long> player : players.entrySet()) { + SocketChannel sc=player.getKey(); + UserListWrapper wp=new UserListWrapper(); + for(Entry<SocketChannel,Long> player1:players.entrySet()) { + if(!inGame.contains(player1.getKey())) { + User temp=s.getUserById(player1.getValue()); + if(temp != null) + wp.users.add(temp); + } + + + } + ByteBuffer buff = ByteBuffer.wrap(wp.toString().getBytes()); + sc.write(buff); + + + } } diff --git a/src/main/java/ui/ChooseOpponentPanel.java b/src/main/java/ui/ChooseOpponentPanel.java index 1b63fca..4ecd823 100644 --- a/src/main/java/ui/ChooseOpponentPanel.java +++ b/src/main/java/ui/ChooseOpponentPanel.java @@ -48,31 +48,8 @@ public class ChooseOpponentPanel extends JPanel { MainFrame topFrame=(MainFrame) SwingUtilities.getAncestorOfClass(MainFrame.class, ChooseOpponentPanel.this); try { SocketChannel client=topFrame.getClient(); - ByteBuffer readBuffer=topFrame.getReadBuffer(); ByteBuffer buff = ByteBuffer.wrap("REQUESTUSERS".getBytes()); client.write(buff); - client.configureBlocking(true); - readBuffer.clear(); - StringBuilder sb=new StringBuilder(); - while(client.read(readBuffer)>0) { - System.out.println("uslo"); - readBuffer.flip(); - byte[] bytes = new byte[readBuffer.limit()]; - readBuffer.get(bytes); - sb.append(new String(bytes)); - readBuffer.clear(); - client.configureBlocking(false); - } - XMLDecoder decoder = null; - decoder = new XMLDecoder(new ByteArrayInputStream(sb.toString().getBytes())); - UserListWrapper wp=(UserListWrapper) decoder.readObject(); - decoder.close(); - comboBox.removeAllItems(); - for(User user :wp.getUsers()) { - comboBox.addItem(new ComboBoxUser(user)); - - } - } catch (Exception e) { // TODO: handle exception } diff --git a/src/main/java/ui/LoginPanel.java b/src/main/java/ui/LoginPanel.java index 7ec97f1..bfd47f9 100644 --- a/src/main/java/ui/LoginPanel.java +++ b/src/main/java/ui/LoginPanel.java @@ -73,6 +73,7 @@ public class LoginPanel extends JPanel { } public void Login() { + System.out.println("SEND LOGIN"); String username=textFieldUsername.getText(); String password=textFieldPassword.getText(); if(!(username.trim().length()>0 && password.trim().length()>0)) @@ -85,36 +86,10 @@ public class LoginPanel extends JPanel { MainFrame topFrame=(MainFrame) SwingUtilities.getAncestorOfClass(MainFrame.class, LoginPanel.this); try { SocketChannel client=topFrame.getClient(); - ByteBuffer readBuffer=topFrame.getReadBuffer(); client.write(bbLogin); - client.configureBlocking(true); - readBuffer.clear(); - StringBuilder sb=new StringBuilder(); - while(client.read(readBuffer)>0) { - readBuffer.flip(); - byte[] bytes = new byte[readBuffer.limit()]; - readBuffer.get(bytes); - sb.append(new String(bytes)); - readBuffer.clear(); - client.configureBlocking(false); - } - String response[]=sb.toString().split(":"); - if(response[0].trim().equals("ACCEPTED")) { - topFrame.setUserId(Long.parseLong(response[1].trim())); - topFrame.getContentPane().removeAll(); - ChooseOpponentPanel panel=new ChooseOpponentPanel(); - topFrame.getContentPane().add(panel,BorderLayout.CENTER); - SwingUtilities.updateComponentTreeUI(topFrame); - panel.getUsers(); - - - }else { - System.out.println("Bad Login"); - warningTextArea.setText("Pogresan Login"); - } } catch (Exception e) { - // TODO: handle exception + e.printStackTrace(); } } diff --git a/src/main/java/ui/MainFrame.java b/src/main/java/ui/MainFrame.java index cb6c6ca..62fb754 100644 --- a/src/main/java/ui/MainFrame.java +++ b/src/main/java/ui/MainFrame.java @@ -7,8 +7,12 @@ import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import models.CONSTS; +import models.ComboBoxUser; +import models.User; +import models.UserListWrapper; import javax.swing.JTextField; +import javax.swing.SwingUtilities; import javax.swing.JLabel; import java.awt.Color; import javax.swing.JButton; @@ -16,6 +20,8 @@ import javax.swing.JTextArea; import java.awt.Font; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.beans.XMLDecoder; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; @@ -38,6 +44,7 @@ public class MainFrame extends JFrame implements Runnable { public ChooseOpponentPanel chooseOpponentPanel=null; GamePanel gamePanel=null; public long userId=-1; + public boolean run=true; public MainFrame() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 727, 429); @@ -51,16 +58,12 @@ public class MainFrame extends JFrame implements Runnable { @Override public void windowClosing(WindowEvent e) { - System.out.println("EXITED"); - try { - client.close(); - Thread.sleep(500); + run=false; } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } - System.exit(EXIT_ON_CLOSE); } }); @@ -74,9 +77,64 @@ public class MainFrame extends JFrame implements Runnable { } @Override public void run() { - while(true) { + try{ + while(run) { + StringBuilder sb=new StringBuilder(); + client.configureBlocking(true); + readBuffer.clear(); + + while(run && client.read(readBuffer)>0) { + readBuffer.flip(); + byte[] bytes = new byte[readBuffer.limit()]; + readBuffer.get(bytes); + sb.append(new String(bytes)); + readBuffer.clear(); + client.configureBlocking(false); + } + if(!run) + { + client.close(); + System.exit(EXIT_ON_CLOSE); + } + String response[]=sb.toString().split(":"); + if(response[0].trim().equals("ACCEPTED")) { + this.setUserId(Long.parseLong(response[1].trim())); + this.getContentPane().removeAll(); + this.getContentPane().add(chooseOpponentPanel,BorderLayout.CENTER); + SwingUtilities.updateComponentTreeUI(this); + chooseOpponentPanel.getUsers(); + + + }else if(response[0].trim().equals("BADLOGIN")){ + System.out.println("Bad Login"); + this.loginPanel.warningTextArea.setText("Pogresan Login"); + }else { + XMLDecoder decoder = null; + decoder = new XMLDecoder(new ByteArrayInputStream(sb.toString().getBytes())); + UserListWrapper wp=(UserListWrapper) decoder.readObject(); + decoder.close(); + chooseOpponentPanel.comboBox.removeAllItems(); + if(wp.getUsers()!=null) + for(User user :wp.getUsers()) { + if(userId!=user.id) + chooseOpponentPanel.comboBox.addItem(new ComboBoxUser(user)); + + } + } + + + } + } catch (Exception e) { + e.printStackTrace(); + } + try { + client.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } + System.exit(EXIT_ON_CLOSE); } public SocketChannel getClient() { |