//Classe Master per la lavagna
//classi supplementari importate
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.net.*;
import java.io.*;
import java.applet.*;
//classe gestore eventi mouse
class Mouse extends MouseInputAdapter{
Lavagna lav;
int x;
int y;
int px;
int py;
Color col;
public Mouse(Lavagna lavApp,Color color){
lav=lavApp;
col=color;
x=0;
y=0;
px=0;
py=0;
}
public void mouseReleased(MouseEvent e){
px=0;
py=0;
x=0;
y=0;
}
public void mouseDragged(MouseEvent e){
x=e.getX();
y=e.getY();
if((px!=0)&&(px!=0)){
if(MasterGraph.sts){
lav.erase(px,py,x,y);
}else{
lav.draw(px,py,x,y,col);
}
MasterGraph.sendPoint(""+px+"_"+py+"_"+x+"_"+y+"_*");
}
px=x;
py=y;
}
public void setColor(Color color){
col=color;
}
}
// classe finta per catturare l' oggetto Image
class Finta extends Applet{
public void init(){
setBackground(Color.white);
}
}
// classe lavagna elettronica
class Lavagna extends Canvas{
int px;
int py;
int x;
int y;
Color col;
Graphics g;
Image im;
public Lavagna(){
px=0;
py=0;
x=0;
y=0;
col=Color.black;
}
public void initG(Finta applet,int x,int y){
im = applet.createImage(x,y);
g = im.getGraphics();
}
public void draw(int px,int py,int x,int y,Color col){
this.px=px;
this.py=py;
this.x=x;
this.y=y;
this.col=col;
g.setColor(col);
g.drawLine(px,py,x,y);
repaint();
}
public void erase(int px,int py,int x,int y){
g.setColor(Color.white);
g.drawLine(px,py,x,y);
repaint();
}
public void paint(Graphics g){
g.drawImage(im,0,0,this);
}
}
// classe principale
public class MasterGraph extends JFrame{
static Lavagna lavagna;
Mouse mouse;
Color color;
static DatagramPacket pOut;
static MulticastSocket mcSock;
static InetAddress ia;
JButton bRed;
JButton bBlack;
JButton bBlue;
JButton bYellow;
JButton bMagenta;
JButton bGreen;
JButton bGray;
JButton bOrange;
JButton bPink;
JButton bCyan;
JButton jbuSelected;
JToggleButton jtbStatus;
static boolean sts;
public MasterGraph(String title){
super(title);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300,300);
setResizable(false);
try{
mcSock=new MulticastSocket(2000);
}catch(IOException e){
JOptionPane.showMessageDialog(null,"Impossibile aprire porta 2000!nIl programma verrà terminato.");
System.exit(0);
}
sts=false;
color=Color.black;
jtbStatus=new JToggleButton("P");
jtbStatus.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(jtbStatus.isSelected()){
jtbStatus.setText("E");
sts=true;
sendStatus(1);
}else{
jtbStatus.setText("P");
sts=false;
sendStatus(0);
}
}
});
JPanel jpaStatus=new JPanel();
jpaStatus.add(jtbStatus);
jbuSelected=new JButton();
jbuSelected.setBackground(color);
JPanel jpa=new JPanel();
jpa.add(jbuSelected);
bRed=new JButton();
bRed.setBackground(Color.red);
bRed.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
color=bRed.getBackground();
jbuSelected.setBackground(color);
mouse.setColor(color);
sendColor();
}
});
bBlue=new JButton();
bBlue.setBackground(Color.blue);
bBlue.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
color=bBlue.getBackground();
jbuSelected.setBackground(color);
mouse.setColor(color);
sendColor();
}
});
bBlack=new JButton();
bBlack.setBackground(Color.black);
bBlack.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
color=bBlack.getBackground();
jbuSelected.setBackground(color);
mouse.setColor(color);
sendColor();
}
});
bGray=new JButton();
bGray.setBackground(Color.gray);
bGray.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
color=bGray.getBackground();
jbuSelected.setBackground(color);
mouse.setColor(color);
sendColor();
}
});
bGreen=new JButton();
bGreen.setBackground(Color.green);
bGreen.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
color=bGreen.getBackground();
jbuSelected.setBackground(color);
mouse.setColor(color);
sendColor();
}
});
bMagenta=new JButton();
bMagenta.setBackground(Color.magenta);
bMagenta.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
color=bMagenta.getBackground();
jbuSelected.setBackground(color);
mouse.setColor(color);
sendColor();
}
});
bOrange=new JButton();
bOrange.setBackground(Color.orange);
bOrange.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
color=bOrange.getBackground();
jbuSelected.setBackground(color);
mouse.setColor(color);
sendColor();
}
});
bPink=new JButton();
bPink.setBackground(Color.pink);
bPink.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
color=bPink.getBackground();
jbuSelected.setBackground(color);
mouse.setColor(color);
sendColor();
}
});
bYellow=new JButton();
bYellow.setBackground(Color.yellow);
bYellow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
color=bYellow.getBackground();
jbuSelected.setBackground(color);
mouse.setColor(color);
sendColor();
}
});
bCyan=new JButton();
bCyan.setBackground(Color.cyan);
bCyan.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
color=bCyan.getBackground();
jbuSelected.setBackground(color);
mouse.setColor(color);
sendColor();
}
});
JPanel pColor=new JPanel();
pColor.setLayout(new GridLayout(2,5));
pColor.add(bBlack);
pColor.add(bBlue);
pColor.add(bRed);
pColor.add(bGray);
pColor.add(bGreen);
pColor.add(bMagenta);
pColor.add(bOrange);
pColor.add(bPink);
pColor.add(bYellow);
pColor.add(bCyan);
JPanel panel=new JPanel();
panel.add(jpaStatus);
panel.add(jpa);
panel.add(pColor);
lavagna= new Lavagna();
Dimension dim=this.getToolkit().getScreenSize();
lavagna.setBackground(Color.white);
Finta f = new Finta();
f.init();
Container contentPane=getContentPane();
contentPane.add(f,"Center");
contentPane.add(panel,"South");
setVisible(true);
lavagna.initG(f,dim.width,dim.height-60);
contentPane.remove(f);
contentPane.add(lavagna);
contentPane.validate();
mouse=new Mouse(lavagna,color);
lavagna.addMouseMotionListener(mouse);
lavagna.addMouseListener(mouse);
}
public void sendStatus(int idx){
try{
String s=null;
if(idx==1){
s=":1";
}else if(idx==0){
s=":0";
}else{
s=":0";
}
pOut=new DatagramPacket(s.getBytes(),s.length(),ia.getLocalHost(),2000);
mcSock.send(pOut);
}catch(SocketException se){
System.out.print(se.getMessage());
}catch(IOException ioe){
System.out.print(ioe.getMessage());
}
}
public void sendColor(){
try{
String s=":"+color.getRGB();
pOut=new DatagramPacket(s.getBytes(),s.length(),ia.getLocalHost(),2000);
mcSock.send(pOut);
}catch(SocketException se){
System.out.print(se.getMessage());
}catch(IOException ioe){
System.out.print(ioe.getMessage());
}
}
public static void sendPoint(String sApp){
try{
System.out.print(sApp+"n");
String s="
:"+sApp;
pOut=new DatagramPacket(s.getBytes(),s.length(),ia.getLocalHost(),2000);
mcSock.send(pOut);
}catch(SocketException se){
System.out.print(se.getMessage());
}catch(IOException ioe){
System.out.print(ioe.getMessage());
}
}
public static void main(String[] args){
MasterGraph frame=new MasterGraph("MasterGraph");
}
}
// Classe slave per lavagna elettronica
// classi supplementari importate
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.net.*;
import java.io.*;
import java.applet.*;
// classe finta per catturare l' oggetto Image
class Finta extends Applet{
public void init(){
setBackground(Color.white);
}
}
// classe lavagna elettronica
class Lavagna extends Canvas{
int px;
int py;
int x;
int y;
Color col;
Graphics g;
Image im;
public Lavagna(){
px=0;
py=0;
x=0;
y=0;
col=null;
}
public void initG(Finta applet,int x,int y){
im = applet.createImage(x,y);
g = im.getGraphics();
}
public void draw(int px,int py,int x,int y,Color col){
this.px=px;
this.py=py;
this.x=x;
this.y=y;
this.col=col;
g.setColor(col);
g.drawLine(px,py,x,y);
repaint();
}
public void erase(int px,int py,int x,int y){
g.setColor(Color.white);
g.drawLine(px,py,x,y);
repaint();
}
public void paint(Graphics g){
g.drawImage(im,0,0,this);
}
}
// classe principale
public class SlaveGraph extends JFrame implements Runnable{
Color color;
DatagramPacket pIn;
MulticastSocket mcSock;
Lavagna lavagna;
boolean sts;
public SlaveGraph(String title){
super(title);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocation(400,300);
setSize(300,260);
setResizable(false);
try{
mcSock=new MulticastSocket(2000);
}catch(IOException e){
JOptionPane.showMessageDialog(null,"Impossibile aprire porta 2000!nIl programma verrà terminato.");
System.exit(0);
}
sts=false;
color=Color.black;
lavagna= new Lavagna();
Dimension dim=this.getToolkit().getScreenSize();
lavagna.setBackground(Color.white);
Finta f = new Finta();
f.init();
Container contentPane=getContentPane();
contentPane.add(f,"Center");
setVisible(true);
lavagna.initG(f,dim.width,dim.height);
contentPane.remove(f);
contentPane.add(lavagna);
contentPane.validate();
new Thread(this).start();
}
public int choose(String sApp){
if(sApp.equals(":")){
return 1;
}else if(sApp.equals(":")){
return 2;
}else if(sApp.equals(":")){
return 3;
}else if(sApp.equals("
:")){
return 0;
}else return 4;
}
public synchronized void draw(String sApp){
int[] vet=new int[4];
char[] bf=sApp.toCharArray();
String app="";
String s="";
int count=0;
for(int i=0;i
s=""+bf[i];
if(s.equals("_")){
try{
vet[count]=Integer.parseInt(app);
app="";
count++;
}catch(NumberFormatException nfe){
System.out.print(nfe.getMessage());
}
}else if(s.equals("*")){
System.out.print(""+vet[0]+","+vet[1]+","+vet[2]+","+vet[3]+"n");
if((vet[0]!=0)&&(vet[1]!=0)){
if(sts){
lavagna.erase(vet[0],vet[1],vet[2],vet[3]);
}else{
lavagna.draw(vet[0],vet[1],vet[2],vet[3],color);
}
}
}else{
app+=bf[i];
}
}
}
public void run(){
while(true){
try{
pIn=new DatagramPacket(new byte[1024],1024);
mcSock.receive(pIn);
String app=new String(pIn.getData(),0,pIn.getLength());
switch(choose(app.substring(0,4))){
case 0:
draw(app.substring(4,app.length()));
break;
case 1:
String s=app.substring(4,app.length());
try{
color=new Color(Integer.parseInt(s));
}catch(NumberFormatException nfe){
color=Color.black;
}
break;
case 2:
break;
case 3:
try{
int stat=Integer.parseInt(app.substring(4,app.length()));
if(stat==1){
sts=true;
}else if(stat==0){
sts=false;
}else if(stat==2){
// erase all;
sts=false;
}else{
sts=false;
}
}catch(NumberFormatException nfe){
}
break;
case 4:
break;
}
}catch(IOException ioe){
}
}
}
public static void main(String[] args){
SlaveGraph frame=new SlaveGraph("SlaveGraph");
}
}
public synchronized void draw(String sApp){
int[] vet=new int[4];
char[] bf=sApp.toCharArray();
String app=\\