Professional Documents
Culture Documents
Practica Multi Cast
Practica Multi Cast
3CM16
Luis Diego Jiménez Delgado
10 de octubre de 2021
/**
*
* @author luis
*/
public interface IView {
void loadView();
void loadContent();
void loadActions();
}
package practica4;
/**
*
* @author luis
*/
public interface ContactListCallback {
package practica4;
/**
*
* @author luis
*/
public interface MulticastCallback {
package practica4;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.MatteBorder;
/**
*
* @author luis
*/
public class ContactListView extends JPanel implements IView {
@Override
public void loadView() {
setLayout(new BorderLayout());
mainList = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1;
gbc.weighty = 1;
mainList.add(new JPanel(), gbc);
add(new JScrollPane(mainList));
}
@Override
public void loadContent() {
@Override
}
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
return panel;
}
/*
* To change this license header, choose License Headers in Project
Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package practica4;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.MatteBorder;
/**
*
* @author luis
*/
public class MessageListView extends JPanel implements IView {
@Override
@Override
public void loadContent() {
@Override
public void loadActions() {
createPanel(content);
}
}
}
package practica4;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.util.HashMap;
import java.util.Map;
/*
* To change this license header, choose License Headers in Project
Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author luis
*/
public class MulticastClient {
@Override
public void run() {
byte[] b = message.getBytes();
DatagramPacket packet = new DatagramPacket(b, b.length, addr,
PORT);
try {
socket.send(packet);
System.out.println("Enviando mensaje: '" + message + "' con
un TTL: " + socket.getTimeToLive());
callback.send(true);
} catch (IOException ex) {
System.out.println(ex);
}
}
}
}
}
@Override
public void run() {
System.out.println("cliente iniciado");
while (true) {
DatagramPacket packet = new DatagramPacket(new byte[512],
512);
try {
socket.receive(packet);
String received = new String(packet.getData());
String response = "";
for (int i = 0; i < received.length(); ++i) {
if ((received.charAt(i) >= 'a' && received.charAt(i)
<= 'z')
|| (received.charAt(i) >= 'A' &&
received.charAt(i) <= 'Z')
|| (received.charAt(i) >= '0' &&
received.charAt(i) <= '9')
|| received.charAt(i) == ' '
|| received.charAt(i) == '.'
|| received.charAt(i) == ','
|| received.charAt(i) == '<'
|| received.charAt(i) == '>'
|| received.charAt(i) == '_'
|| received.charAt(i) == '-'
|| received.charAt(i) == ':') {
response += received.charAt(i);
}
}
actionSelector(response);
} catch (IOException ex) {
System.out.println(ex);
}
}
}
}
}
/*
* To change this license header, choose License Headers in Project
Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package practica4;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
/**
*
* @author luis
*/
public class MainView extends JFrame implements IView {
@Override
public void loadView() {
setLayout(null);
setSize(750, 550);
setVisible(true);
text = new JTextField();
text.setBounds(250, 420, 450, 80);
text.setVisible(true);
label = new JLabel("Enviar mensaje para todos:");
label.setBounds(250, 400, 500, 20);
label.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
contactList = new ContactListView(this.userName, new
ContactListCallback() {
@Override
public void onContactSelected(String contact) {
selectedContact = contact;
label.setText("Enviar mensaje para " + contact + ":");
}
@Override
public void onContactUnselect() {
selectedContact = null;
label.setText("Enviar mensaje para todos:");
}
});
contactList.setBounds(0, 0, 250, 500);
contactList.start();
contactList.setVisible(true);
messageList = new MessageListView(this.userName);
this.add(contactList);
this.add(messageList);
this.add(text);
this.add(label);
this.add(button);
@Override
public void loadContent() {
@Override
public void loadActions() {
client = new MulticastClient(new MulticastCallback() {
@Override
public void send(boolean isCorrect) {
System.err.println(isCorrect ? "el mensaje se envio
correctamente" : "el mensaje es incorrecto");
}
@Override
public void newContact(String contact) {
contactList.addContact(contact);
client.sendPrivateMessage("", contact);
}
@Override
public void killContact(String contact) {
contactList.deleteContact(contact);
}
@Override
public void privateMessage(String message, String from) {
messageList.privateMessage(message, from);
}
@Override
public void publicMessage(String message, String from) {
messageList.publicMessage(message, from);
}
}, userName);
client.start();
client.sendWelcomeMessage();
button.addActionListener((ActionEvent e) -> {
String message = text.getText();
if (message != null && !message.equals("")) {
if (selectedContact != null) {
client.sendPrivateMessage(message, selectedContact);
messageList.addPrivateMessage(message, selectedContact);
} else {
client.sendMessage(message);
messageList.addPublicMessage(message);
}
text.setText("");
}
});
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
client.sendGoodbye();
System.exit(0);
}
});
}
package practica4;
/**
*
* @author luis
*/
public class Practica4 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
MainView mainView = new MainView("usurariofinal");
mainView.start();
}