aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorcirakg <ciraboxkg@gmail.com>2022-12-30 05:46:35 +0100
committercirakg <ciraboxkg@gmail.com>2022-12-30 05:46:35 +0100
commit71eac283af1b69d1f665a83a0dd251d095cfb235 (patch)
tree53f583d3832fb98e6cf84b76ba495baac3a57351 /src/main
parent110a2354cff010f88b59dbb302192fce0cc6a9ac (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.java52
-rw-r--r--src/main/java/ui/ChooseOpponentPanel.java23
-rw-r--r--src/main/java/ui/LoginPanel.java29
-rw-r--r--src/main/java/ui/MainFrame.java70
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() {