[Java] actionhandler bij incoming message

Pagina: 1
Acties:

  • noot101
  • Registratie: Februari 2002
  • Laatst online: 10-01 13:54
Ik ben bezig met het schrijven van een java-applet die als client moet gaan draaien. Nu is het zo dat ik van de server berichten binnen krijg. Maar ik wil dat het applet alleen iets gaat doen als er een bericht binnenkomt.
Ik heb al een socket-verbinding opgezet.

Nu wil ik dus graag weten of er zoiets is als een soort van actionhandler of zo, waarbij ik dus naar een methode ga als er een bericht binnenkomt via de socket.

Ik heb al gezocht naar voorbeelden van chat-clients maar hier kon ik niks in ontdekken wat ik wil gebruiken.

  • Uiligheid
  • Registratie: December 2000
  • Laatst online: 20-08 15:21

Uiligheid

alle gekheid op een stokje

Heb dat ook een keer gedaan, dan moet je een thread maken.. dat luistert naar de server.
Op de server moeten twee threadjes kunnen draaien.. 1 om constant te kunnen luisteren en de andere om ook berichten te kunnen versturen tijdens het luisteren.

Is dat voldoende info?

Ceterum censeo Carthaginem esse delendam


  • noot101
  • Registratie: Februari 2002
  • Laatst online: 10-01 13:54
Het is eigenlijk de bedoeling dat de client moet luisteren naar berichten die van de server af komen.
Het probleem is dus eigenlijk: Hoe kan ik luisteren naar een bericht dat binnen moet komen en hoe kun je daar dan op reageren door met dit bericht iets te gaan doen

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Met zoiets, het moge duidelijk zijn dat er het 1 en ander ontbreekt :P
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    private class MsgPump extends Thread { 
      private int _errcount = 0;

      protected MsgPump() {
        _errcount = 0;
      }

      public void run() {
        while(true) {
            Message m = null;
            try {
              sleep(500);
              m = null;
              System.out.println("Reading from IStream: " + _in);
              m = (Message)_in.readObject();
              if(m!=null) gotMessage(m);              
            } catch (Exception e) {
              System.out.println("Error reading from IStream " + _in + ": " + e);
              e.printStackTrace();
              if (_errcount++ > 50) {
                close();
              }
            }
        }
      }
    }

Deze thread laat je dus door een soort "Client" klasse runnen en je laat 'em de client klasse aanroepen als er iets binnenkomt, of misschien de messages in een queue zetten ofzo.

Die sleep() is trouwens niet eens nodig, want readObject() blockt. Hij staat ertussen om te zorgen dat 'ie pas na 25 secondes 50 errors heeft en niet na 1 sec als er iets gebeurd.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Zoals uiligheid al zegt. Het makkelijkste is om gewoon een thread te maken die de hele tijd de inputstream probeert uit te lezen. Deze kan dit vervolgens mooi aan de rest van je applet geven. Zorg er wel voor dat je berichten een goede scheidingsindicatie hebben zodat je applet ook weet waneer het bericht opgehouden is en het volgende bericht kan beginnen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 19:22

NDF82

Doomed Space Marine

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while(true)
{
  String line;
  try
  {
    line = bufferedReader.readLine();
    if (line != null && !line.equals(""))
    {
    //jouw code
    }
  }catch (Exception e)
  {
    e.printStackTrace();
  }
}

uit het hoofd dus weet niet of het werkt

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


  • noot101
  • Registratie: Februari 2002
  • Laatst online: 10-01 13:54
Bedankt ik denk dat ik hier wel wat mee kan maken.

Maar als ik het dus goed begrijp is het dus het makkelijkste om continu te kijken of ik iets kan uitlezen. En als dit kan een actie te doen.

  • Uiligheid
  • Registratie: December 2000
  • Laatst online: 20-08 15:21

Uiligheid

alle gekheid op een stokje

Sterker nog, je zult de hele tijd moeten luisteren of er iets binnen komt. Anders zou je wat kunnen missen.
Je moet constant luisteren, anders mis je wat.

Wat was je voorstelling anders? Dat de server een berichtje zou sturen dat hij moest gaan luisteren? Dan moet hij daar ook al naar luisteren, toch ?

Als het niet lukt, moet je maar es posten, heb volgens mij nog wel wat thuis liggen..

Ceterum censeo Carthaginem esse delendam


  • noot101
  • Registratie: Februari 2002
  • Laatst online: 10-01 13:54
Op vrijdag 07 juni 2002 12:12 schreef Uiligheid het volgende:
...
Wat was je voorstelling anders? Dat de server een berichtje zou sturen dat hij moest gaan luisteren? Dan moet hij daar ook al naar luisteren, toch ?
....
Ik dacht eigenlijk dat er wel zoiets zou zijn zoals actionPerformed bij een button. Dus dat je niet continu hoeft te proberen om een message te lezen, maar dat ie alleen iets doet als er een bericht binnen komt. Maar je hebt gelijk ook dan moet je natuurlijk wel staan te luisteren.

Als het werkt zal ik wel ff de code posten hoe ik het opgelost heb
Pagina: 1