Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -------------------CLIENTE---------------------
- package stivent;
- import javax.swing.*;
- import javax.swing.border.Border;
- import javax.swing.border.EmptyBorder;
- import stivent.Client.ClientDataOut;
- import stivent.Server.ServerDataOut;
- import java.awt.*;
- import java.awt.event.*;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.lang.reflect.InvocationTargetException;
- import java.net.Inet4Address;
- import java.net.InetAddress;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import java.util.Scanner;
- public class Client extends JFrame implements Runnable{
- JPanel registerPanel;
- JPanel loginPanel;
- JPanel chatPanel;
- DefaultListModel<String> listModel = new DefaultListModel<>();
- JList friendList = new JList(listModel);
- transient ServerDataOut serverData;
- transient ClientDataOut clientData = new ClientDataOut();
- public static void main(String[] args) {
- EventQueue.invokeLater(new Runnable() {
- @Override
- public void run() {
- new Client();
- }
- });
- }
- public Client(){
- //Frame
- setSize(480,509);
- setLocationRelativeTo(null);
- setResizable(false);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setTitle("My chat");
- //Content pane
- getContentPane().setLayout(null);
- //Login Panel
- loginPanel = new JPanel() {
- protected void paintComponent(Graphics g) {
- super.paintComponent(g);
- Graphics2D cabeza= (Graphics2D)g;
- cabeza.setStroke(new BasicStroke());
- cabeza.setPaint(new Color(20,209,200));
- cabeza.fillOval(175, 50, 100, 100);
- Graphics2D cuerpo= (Graphics2D)g;
- cuerpo.setStroke(new BasicStroke());
- cuerpo.setPaint(new Color(20,209,200));
- cuerpo.fillOval(150, 153, 150, 70);
- }
- };
- loginPanel.setBackground(new Color(171,241,217));
- loginPanel.setLayout(null);
- loginPanel.setVisible(true);
- loginPanel.setBounds(0,0,480,509);
- //Login Panel Components
- JTextField userName = new JTextField();
- userName.setFont(new Font("Arial", Font.PLAIN, 17));
- userName.setBorder(null);
- userName.setBounds(135, 267, 187, 28);
- loginPanel.add(userName);
- JPasswordField passwordField = new JPasswordField();
- passwordField.setFont(new Font("Arial", Font.PLAIN, 17));
- passwordField.setBorder(null);
- passwordField.setBounds(135, 335, 187, 28);
- loginPanel.add(passwordField);
- JButton logIn = new JButton("LogIn");
- logIn.setBorder(null);
- logIn.setBackground(new Color(25, 214, 208));
- logIn.setBounds(179, 389, 89, 28);
- logIn.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- try {
- clientData.singUpOrLogIn("logIn", userName.getText(), String.valueOf(passwordField.getPassword()));
- clientData.ipSentConfirm = true;
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- loginPanel.add(logIn);
- JLabel signIn = new JLabel("Sign in");
- signIn.setFont(new Font("Tahoma", Font.BOLD, 13));
- signIn.setBounds(200, 428, 122, 42);
- loginPanel.add(signIn);
- signIn.addMouseListener(new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- loginPanel.setVisible(false);
- registerPanel.setVisible(true);
- }
- });
- getContentPane().add(loginPanel);
- //Register Panel
- registerPanel = new JPanel() {
- protected void paintComponent(Graphics g) {
- super.paintComponent(g);
- Graphics2D cabeza= (Graphics2D)g;
- cabeza.setStroke(new BasicStroke());
- cabeza.setPaint(new Color(20,209,200));
- cabeza.fillOval(175, 50, 100, 100);
- Graphics2D cuerpo= (Graphics2D)g;
- cuerpo.setStroke(new BasicStroke());
- cuerpo.setPaint(new Color(20,209,200));
- cuerpo.fillOval(150, 153, 150, 70);
- }
- };
- registerPanel.setLayout(null);
- registerPanel.setBackground(new Color(171, 241, 217));
- registerPanel.setVisible(false);
- registerPanel.setBounds(0,0,480,509);
- //Register panel components
- JTextField registerNameUser = new JTextField();
- registerNameUser.setFont(new Font("Arial", Font.PLAIN, 17));
- registerNameUser.setBorder(null);
- registerNameUser.setBounds(135, 267, 187, 28);
- registerPanel.add(registerNameUser);
- JPasswordField registerPasswordField = new JPasswordField();
- registerPasswordField.setFont(new Font("Arial", Font.PLAIN, 17));
- registerPasswordField.setBorder(null);
- registerPasswordField.setBounds(135, 335, 187, 28);
- registerPanel.add(registerPasswordField);
- JButton registerButton = new JButton("Register");
- registerButton.setBorder(null);
- registerButton.setBackground(new Color(25, 214, 208));
- registerButton.setBounds(179, 389, 89, 28);
- registerPanel.add(registerButton);
- //Register request
- registerButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- try {
- clientData.singUpOrLogIn("singUp",registerNameUser.getText(), String.valueOf(registerPasswordField.getPassword()));
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- JLabel login = new JLabel("Are you registred already?");
- login.setFont(new Font("Tahoma", Font.BOLD, 13));
- login.setBounds(135, 428, 187, 42);
- registerPanel.add(login);
- login.addMouseListener(new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- registerPanel.setVisible(false);
- loginPanel.setVisible(true);
- }
- });
- getContentPane().add(registerPanel);
- //Chat panel
- chatPanel = new JPanel(){
- protected void paintComponent(Graphics g) {
- super.paintComponent(g);
- g.drawLine(23, 17, 10, 30);
- Graphics2D magnifyingGlassIcon= (Graphics2D)g;
- magnifyingGlassIcon.setStroke(new BasicStroke());
- magnifyingGlassIcon.setPaint(new Color(255,255,255));
- magnifyingGlassIcon.fillOval(20, 5, 15, 15);
- }
- };
- chatPanel.setBackground(new Color(171,241,217));
- chatPanel.setLayout(null);
- chatPanel.setVisible(false);
- chatPanel.setBounds(0,0,480,509);
- //Chat panel components
- JTextField chatField = new JTextField();
- chatField.setBounds(10, 445, 444, 24);
- chatPanel.add(chatField);
- JTextField searchField = new JTextField();
- searchField.setBounds(44, 6, 180, 24);
- chatPanel.add(searchField);
- friendList.setBounds(281, 71, 173, 363);
- chatPanel.add(friendList);
- TextArea textArea = new TextArea();
- textArea.setEditable(false);
- textArea.setBounds(10, 37, 265, 397);
- chatPanel.add(textArea);
- JLabel friendsLabel = new JLabel("My Friends");
- friendsLabel.setBounds(320, 42, 88, 25);
- friendsLabel.setFont(new Font("Arial", Font.BOLD, 16));
- chatPanel.add(friendsLabel);
- JButton addFriendButton = new JButton("Add");
- addFriendButton.setBorder(BorderFactory.createEmptyBorder());
- addFriendButton.setBounds(234, 6, 65, 25);
- addFriendButton.setBackground(new Color(20,209,200));
- addFriendButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- clientData.searchUser = searchField.getText();
- try {
- clientData.sendFriendRequest("friendRequest");
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- chatPanel.add(addFriendButton);
- JButton eliminateFriendButton = new JButton("Eliminate");
- eliminateFriendButton.setBorder(BorderFactory.createEmptyBorder());
- eliminateFriendButton.setBounds(309, 6, 65, 25);
- eliminateFriendButton.setBackground(new Color(25, 214, 208));
- chatPanel.add(eliminateFriendButton);
- JButton signOffButton = new JButton("Sign off");
- signOffButton.setBorder(BorderFactory.createEmptyBorder());
- signOffButton.setBounds(384, 6, 70, 25);
- signOffButton.setForeground(Color.WHITE);
- signOffButton.setBackground(new Color(182, 1, 52));
- chatPanel.add(signOffButton);
- getContentPane().add(chatPanel);
- setVisible(true);
- //Second thread
- Thread secondThread = new Thread(this);
- Thread thredThread = new Thread(this);
- secondThread.start();
- }
- @Override
- public void run() {
- try {
- ServerSocket socket = new ServerSocket(4567);
- while(true) {
- Socket dataListener = socket.accept();
- ObjectInputStream inPut = new ObjectInputStream(dataListener.getInputStream());
- serverData = (ServerDataOut) inPut.readObject();
- inPut.close();
- clientData.filterRequest();
- }
- } catch (IOException | ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- private void Login() {
- loginPanel.setVisible(false);
- chatPanel.setVisible(true);
- try {
- clientData.getMyFriendsList();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- private void buildMyFriendsList() {
- try {
- Scanner scan = new Scanner(serverData.clientFriendsList);
- if(listModel.isEmpty()) {
- while(scan.hasNext())
- listModel.addElement(scan.next());
- }
- else {
- listModel.removeAllElements();
- while(scan.hasNext())
- listModel.addElement(scan.next());
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- public class ClientDataOut implements Serializable{
- String requestTypeClient;
- String name;
- String password;
- String searchUser;
- String friendRequestOf;
- boolean ipSentConfirm = false;
- private void filterRequest() throws IOException {
- switch(serverData.requestTypeServer) {
- case "friendRequest":
- friendRequestToMe();
- break;
- case "serverLoginPermission":
- Login();
- break;
- case "Error":
- Error();
- break;
- case "MyFriendsList":
- buildMyFriendsList();
- break;
- }
- }
- private void mySocket(ClientDataOut object) throws IOException {
- Socket socket = new Socket("255.255.255.255", 4444);
- ObjectOutputStream outData = new ObjectOutputStream(socket.getOutputStream());
- outData.writeObject(object);
- outData.close();
- }
- private void singUpOrLogIn(String requestType, String name, String password) throws IOException{
- this.requestTypeClient = requestType;
- this.name = name;
- this.password = password;
- mySocket(clientData);
- }
- private void sendFriendRequest(String requestType) throws IOException {
- this.requestTypeClient = requestType;
- mySocket(clientData);
- }
- private void getMyFriendsList() throws IOException {
- clientData.requestTypeClient = "buildTheClientListFriends";
- mySocket(clientData);
- }
- private void Error() {
- JFrame f = new JFrame();
- f.setAlwaysOnTop(true);
- switch(serverData.Error) {
- case "nameOrPasswordIncorret":
- JOptionPane.showMessageDialog(f,"The Name or password it's incorrect", "Duplicate Name", JOptionPane.ERROR_MESSAGE);
- clientData.ipSentConfirm = false;
- break;
- case "TheNameAlreadyExists":
- JOptionPane.showMessageDialog(f,"There is a name like this already", "Duplicate name error", JOptionPane.ERROR_MESSAGE);
- break;
- case "UserNotFound":
- JOptionPane.showMessageDialog(f,"the name does not exist or is misspelled", "User not found error", JOptionPane.ERROR_MESSAGE);
- break;
- }
- }
- private void friendRequestToMe() throws IOException {
- JFrame f = new JFrame();
- f.setAlwaysOnTop(true);
- if(JOptionPane.showConfirmDialog(f, "Do you want to add " + serverData.FriendRequestOf + " as your friend")==0) {
- clientData.requestTypeClient = "clientFriendList";
- clientData.friendRequestOf = serverData.FriendRequestOf;
- mySocket(clientData);
- }
- }
- }
- }
- ----------------------SERVER-----------
- package stivent;
- import javax.swing.*;
- import stivent.Client.ClientDataOut;
- import java.awt.*;
- import java.awt.event.TextEvent;
- import java.awt.event.TextListener;
- import java.awt.peer.TextAreaPeer;
- import java.io.BufferedWriter;
- import java.io.DataInputStream;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.text.FieldPosition;
- import java.util.Calendar;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Map;
- import java.util.Scanner;
- import java.util.Set;
- public class Server extends JFrame implements Runnable {
- TextArea textArea = new TextArea();
- transient ClientDataOut clientData;
- transient ServerDataOut serverData = new ServerDataOut();
- Set<String> names = new HashSet<>();
- Set<String> nameAndPasswordIdentifcator = new HashSet<>();
- transient Socket wait;
- public static void main(String[] args) {
- EventQueue.invokeLater(new Runnable() {
- @Override
- public void run() {
- new Server();
- }
- });
- }
- public Server(){
- setSize(480,509);
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- setResizable(false);
- setTitle("Server");
- setVisible(true);
- textArea = new TextArea();
- textArea.setEditable(false);
- getContentPane().add(textArea);
- //Thread for my SocketListener
- Thread secondThread = new Thread(this);
- secondThread.start();
- }
- @Override
- public void run() {
- try {
- ServerSocket socket = new ServerSocket(4444);
- while(true) {
- wait = socket.accept();
- ObjectInputStream input = new ObjectInputStream(wait.getInputStream());
- clientData = (ClientDataOut) input.readObject();
- input.close();
- filterRequest();
- }
- }
- catch (IOException | ClassNotFoundException e) {
- System.out.println("Something is wrong");
- }
- }
- public void mySocket(ServerDataOut serverData, String ip) throws IOException {
- Socket socket = new Socket(ip, 4567);
- ObjectOutputStream outData = new ObjectOutputStream(socket.getOutputStream());
- outData.writeObject(serverData);
- outData.close();
- }
- private void filterRequest() throws IOException {
- switch(clientData.requestTypeClient) {
- case "singUp":
- singUpDuplicateNameTester();
- break;
- case "logIn":
- logIn();
- break;
- case "friendRequest":
- sendFriendRequest();
- break;
- case "clientFriendList":
- addFriendsToTheList();
- break;
- case "buildTheClientListFriends":
- buildFriendsList();
- break;
- }
- }
- private void singUpDuplicateNameTester() throws IOException {
- File file = new File("C:\\Users\\Stive\\Desktop\\Server\\RegisterName.txt");
- Scanner scan = new Scanner(file);
- while(scan.hasNext()) {
- String myWord = scan.next();
- names.add(myWord);
- }
- if(names.contains(clientData.name)==false) {
- singUp();
- }
- else {
- serverData.requestTypeServer = "Error";
- serverData.Error = "TheNameAlreadyExists";
- mySocket(serverData, wait.getInetAddress().getHostAddress());
- }
- }
- private void singUp() throws IOException {
- FileWriter names = new FileWriter("C:\\Users\\Stive\\Desktop\\Server\\RegisterName.txt", true);
- BufferedWriter buffer2 = new BufferedWriter(names);
- buffer2.write(clientData.name + "\r\n");
- buffer2.close();
- FileWriter writerIdentificator = new FileWriter("C:\\Users\\Stive\\Desktop\\Server\\RegisterLogIn.txt", true);
- BufferedWriter buffer = new BufferedWriter(writerIdentificator);
- buffer.write(clientData.name + clientData.password + "\r\n");
- buffer.close();
- textArea.append("[" + Calendar.getInstance().get(Calendar.HOUR_OF_DAY) + ":" + Calendar.getInstance().get(Calendar.MINUTE) + "]-" + clientData.name + " just signed up"+ "\r\n");
- }
- private void logIn() throws IOException {
- File fileNameAndPasswordIdentifcator = new File("C:\\Users\\Stive\\Desktop\\Server\\RegisterLogIn.txt");
- Scanner scan = new Scanner(fileNameAndPasswordIdentifcator);
- while(scan.hasNext()) {
- String myWord = scan.next();
- nameAndPasswordIdentifcator.add(myWord);
- }
- if(nameAndPasswordIdentifcator.contains(clientData.name + clientData.password)) {
- textArea.append("[" + Calendar.getInstance().get(Calendar.HOUR_OF_DAY) + ":" + Calendar.getInstance().get(Calendar.MINUTE) + "]-" + clientData.name + " just logged in" + "\r\n");
- duplicateIpTester();
- serverData.requestTypeServer = "serverLoginPermission";
- mySocket(serverData, wait.getInetAddress().getHostAddress());
- }
- else{
- serverData.requestTypeServer = "Error";
- serverData.Error = "nameOrPasswordIncorret";
- mySocket(serverData, wait.getInetAddress().getHostAddress());
- }
- }
- private void saveClientIp() throws IOException {
- FileWriter saveIp = new FileWriter("C:\\Users\\Stive\\Desktop\\Server\\RegisterIp.txt",true);
- saveIp.write(clientData.name + " " + wait.getInetAddress().getHostAddress() + "\r\n");
- saveIp.close();
- textArea.append("[" + Calendar.getInstance().get(Calendar.HOUR_OF_DAY) + ":" + Calendar.getInstance().get(Calendar.MINUTE) + "]-" + "The ip:" + "'" + wait.getInetAddress().getHostAddress() + "'" + " of " + clientData.name + " has been saved" + "\r\n");
- }
- private void duplicateIpTester() throws IOException {
- if(clientData.ipSentConfirm==false) {
- File checkIp = new File("C:\\Users\\Stive\\Desktop\\Server\\RegisterIp.txt");
- Scanner scan = new Scanner(checkIp);
- Set<String> duplicateIpTester = new HashSet<>();
- while(scan.hasNext())
- duplicateIpTester.add(scan.nextLine());
- if(!duplicateIpTester.contains(clientData.name + " " + wait.getInetAddress().getHostAddress()))
- saveClientIp();
- }
- }
- private void sendFriendRequest() throws IOException {
- File registerIp = new File("C:\\Users\\Stive\\Desktop\\Server\\RegisterIp.txt");
- Scanner scan = new Scanner(registerIp);
- Map<String, String> searchUser = new HashMap<>();
- while(scan.hasNext())
- searchUser.put(scan.next(), scan.next());
- if(searchUser.containsKey(clientData.searchUser)) {
- serverData.FriendRequestOf = clientData.searchUser;
- serverData.requestTypeServer = "friendRequest";
- mySocket(serverData, searchUser.get(clientData.searchUser));
- }
- else {
- serverData.requestTypeServer = "Error";
- serverData.Error = "UserNotFound";
- mySocket(serverData, searchUser.get(clientData.name));
- }
- }
- void addFriendsToTheList() throws IOException {
- FileWriter writer = new FileWriter("C:\\Users\\Stive\\Desktop\\Server\\FriendLists\\" + clientData.name + "FriendsList.txt",true);
- writer.write(clientData.friendRequestOf + "\r\n");
- writer.close();
- buildFriendsList();
- }
- void buildFriendsList() throws IOException {
- serverData.clientFriendsList = "";
- File file = new File("C:\\Users\\Stive\\Desktop\\Server\\FriendLists\\" + clientData.name + "FriendsList.txt");
- if(file.exists()) {
- }else {
- file.createNewFile();
- }
- Scanner scan = new Scanner(file);
- //Works just if the client have friends
- if(scan.hasNext()) {
- while(scan.hasNext())
- serverData.clientFriendsList +=" " + scan.next();
- serverData.requestTypeServer = "MyFriendsList";
- mySocket(serverData, wait.getInetAddress().getHostAddress());
- serverData.clientFriendsList = "";
- }
- }
- public class ServerDataOut implements Serializable{
- String FriendRequestOf;
- String requestTypeServer;
- String Error;
- String clientFriendsList;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement