Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    37

    condivisione di una stringa

    ciao a tutti,avrei bisogno del vostro aiuto..
    sto creando un progetto dove quando scrivo su un panel tramite Graphics2D,voglio che la stessa scritta compaia anche su tutti gli altri panel attivi in quel momento..
    sto usando client-server con stub/skeleton e posso appoggiarmi ad un database..
    qualche consiglio?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da maxnanus Visualizza il messaggio
    sto usando client-server con stub/skeleton
    Si tratta di RMI? O di altro?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    37
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Si tratta di RMI? O di altro?
    nono senza RMI
    il client comunica con lo stub che comunica con lo skeleton che a sua volta comunica con il server tutto tramite socket,
    ma se hai una bella idea con l'rmi posso cambiare =)

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da maxnanus Visualizza il messaggio
    nono senza RMI
    tutto tramite socket
    Ok, quindi il "protocollo" di comunicazione è tuo? Scelto/inventato da te? Se così, allora devi prevedere tu il meccanismo per cui tutti i client possano ricevere (magari eventualmente in modo asincrono) la stringa.
    Senza sapere altro non posso dire molto di più, mi spiace.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    37
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ok, quindi il "protocollo" di comunicazione è tuo? Scelto/inventato da te? Se così, allora devi prevedere tu il meccanismo per cui tutti i client possano ricevere (magari eventualmente in modo asincrono) la stringa.
    Senza sapere altro non posso dire molto di più, mi spiace.
    è una semplice connessione con socket(localhost,porta) che comunicano con bufferedreader e printstream
    ora quello che vorrei fare è creare un thread che si associa ad ogni panel e prende in ingresso la stringa e la riproduce sul panel ad esso associato

  6. #6
    La butto lì...non potresti usare un messaggio di broadcast?
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    37
    Quote Originariamente inviata da schumy2000 Visualizza il messaggio
    La butto lì...non potresti usare un messaggio di broadcast?
    ci ho pensato anche io ma non saprei come impostarlo..

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    37
    vi metto un po' di codice...
    oltre a client e server,creo questo panel

    codice:
    class PaintPanel extends JPanel implements MouseMotionListener, MouseListener {
    
    
        private static Color COLOR_FOREGROUND = LoggedMain.colore_lavagna;
        private static final Color COLOR_BACKGROUND = Color.white;
        private static final int SIZE = 300;
        private int x = 10, y = 10;
        private String percorso, w_user,titolo;
        private BufferedImage _bufImage = null;
    
    
        public PaintPanel(String titolo) throws Exception{
            setPreferredSize(new Dimension(SIZE, SIZE));
            setBackground(Color.WHITE);
            addMouseMotionListener(this);
            addMouseListener(this);
            this.titolo = titolo;
            Diffusore d = new Diffusore(this);
            StringTokenizer stk = new StringTokenizer(titolo,"_");
            w_user = stk.nextToken(); // seleziono il nome dell'utente che gestisce la lavagna
    
    
        }
    
    
        public void paintComponent(Graphics g) {
            super.paintComponents(g);
            Graphics2D g2 = (Graphics2D) g;
    
    
            if (_bufImage == null) {
                int w = this.getWidth();
                int h = this.getHeight();
                _bufImage = (BufferedImage) this.createImage(w, h);
                Graphics2D gc = _bufImage.createGraphics();
                gc.setColor(COLOR_BACKGROUND);
                gc.fillRect(0, 0, w, h);
    
    
            }
            g2.drawImage(_bufImage, null, 0, 0);
        }
    
    
        private void drawCurrentShape(Graphics2D g2) {
            g2.setColor(COLOR_FOREGROUND);
            g2.drawLine(x, y, x, y);
    
    
        }
    
    
        public void mouseDragged(MouseEvent e) {
    
    
            x = e.getX();
            y = e.getY();
            drawCurrentShape(_bufImage.createGraphics());
            percorso = percorso.concat(String.valueOf(x).concat(",") // creo il percorso del tratto
                    .concat(String.valueOf(y)).concat(";"));
            repaint();
    
    
        }
    
    
        public void mousePressed(MouseEvent e) {
            x = e.getX();
            y = e.getY();
            percorso = String.valueOf(x).concat(",").concat(String.valueOf(y))
                    .concat(";");
    
    
        }
    
    
        public void mouseMoved(MouseEvent e) {
    
    
        }
    
    
        public void mouseClicked(MouseEvent arg0) {
    
    
        }
    
    
        public void mouseEntered(MouseEvent arg0) {
    
    
        }
    
    
        public void mouseExited(MouseEvent arg0) {
    
    
        }
    
    
        public void mouseReleased(MouseEvent e) {
    
    
            percorso = percorso.substring(0, percorso.length() - 1); //quando rilascio il mouse,inserisco
            Stub.out.println("insert_way " + percorso +" "+ w_user +" "+ titolo); //il tratto nella tabella
            System.out.println(percorso);  //dei tratti comunicando questo compito al server
            Stub.out.println("diffondi "+percorso+" "+w_user+" "+COLOR_FOREGROUND);
            System.out.println(w_user);
            System.out.println(titolo);
        }
    
    
    }
    e l'idea era fare un diffusore che dovrei fare anche con il broadcast solo che non so come farlo

    codice:
    public class Diffusore extends Thread {
    
    
    boolean first = true;
    PaintPanel pp;
    
    
        public Diffusore(PaintPanel paintpanel) throws Exception {
            pp=paintpanel;
            this.start();
        }
    
    
        public void run() {
            while(true){
                try {
                    
                    System.out.println("avvio "+pp);
                    String s = Stub.in.readLine();
                    StringTokenizer stk = new StringTokenizer(s," ");
                    String cmd = stk.nextToken();
                    String percorso = stk.nextToken();
                    String user= stk.nextToken();
                    String colore= stk.nextToken();
                    if(cmd.equals("diff")){
                        
                        System.out.println("diffusore "+percorso);
                        
                        
                    }
                    }
                 catch (Exception e) {
                }
            }
        }
    }

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da maxnanus Visualizza il messaggio
    ci ho pensato anche io ma non saprei come impostarlo..
    La questione principale è il "protocollo" di comunicazione. Generalmente per comunicazioni su socket fatte così da zero, magari per esercizio o poco più si usa un classico protocollo sincrono "domanda-risposta". Probabilmente una cosa del genere non è appropriata nel tuo caso e bisogna pensare ad un protocollo a-sincrono, dove i due stream del socket vengono gestiti indipendentemente, in modo che lo stream di ingresso che il client riceve possa ricevere in qualunque momento i dati. E chiaramente il protocollo per questo lato deve poter "esprimere" correttamente tutte le varie possibilità di informazione. Esempio banale: un protocollo testuale fatto "a righe", dove ogni riga è la stringa che devi trasferire.

    Quindi prima valuta bene il protocollo .... poi pensa alla implementazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.