Partie server d'un chat en applet

Signaler
Messages postés
9
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
25 juillet 2003
-
Messages postés
210
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
18 décembre 2003
-
Salut a tous,
dans le cadre de mon stage je dois faire un chat en java et je n'arrive pas a lancer ma partie server, je ne c pas pkoi ca plante. Merci de jeter un oeil a mon code et aux erreurs ki s'affichent!

Voici le code de la classe javachat:


package tutu;

import java.net.*;
import java.util.*;
import java.io.*;

public class javachat
{
static int maxconn=1000;
static String version="SAM'Chat par Nicolas Sanfilippo";
static int international=0,debug=0;
static User[] users=new User[maxconn];
static String[] channels=new String[maxconn+1];
static int[] channelop=new int[maxconn+1];
static int[] cflags=new int[maxconn+1];
static long uptime;
static Date myDate=new Date();
static Random myRandom=new Random();
static String sysoppw="";

  public static void main(String args[]) throws Exception
  {
  int connections;
  int tries,banptr=0,r,l,okey;
  String temp="";
  String[] bans=new String[255];
  ServerSocket acceptSocket;
  InputStreamReader myReader;
  File fichier=new File("hosts.deny");
  InputStream myfileinput=new FileInputStream(fichier);
  myReader=new InputStreamReader(myfileinput);
  BufferedReader myBufferedInput=new BufferedReader(myReader);
  Socket mysocket;
  int port=2005;
  StringTokenizer config;

    tries=1;
    myBufferedInput.mark(8192);
    while(tries==1) // lorsque l'essai de connexion est manqué.
    { try { temp=myBufferedInput.readLine(); }
      catch (Exception e) { tries=0; } // on réinitialise à 0 s'il y a une erreur.
      banptr++; // incrémentation du pointeur de ban.
      if (!myBufferedInput.ready()) tries=0; // on réinitialise à 0 si le BufferedReader n'est pas prêt.
    }
    r=banptr;

    banptr=0;
    myBufferedInput.reset();
    for (tries=0; tries<r; tries++)
    {
      try { temp=myBufferedInput.readLine(); }
      catch (Exception e) { tries=0; }
      temp=temp.trim();
      if (temp.length()>0) bans[banptr++]=temp;
    }

    fichier=new File("javachat.conf");
    myfileinput=new FileInputStream(fichier);
    myReader=new InputStreamReader(myfileinput);
    myBufferedInput=new BufferedReader(myReader);

    while(true)        // Boucle infinie
    { try { temp=myBufferedInput.readLine().trim(); }
      catch (Exception e) { System.out.println("Error: "+e.toString()); break; }

      if (temp.length()>0 && temp.charAt(0)!='#')
      {	config=new StringTokenizer(temp," ");
        temp=config.nextToken().trim();
        if (temp.equals("SYSOP_PASSWORD"))
        { sysoppw=config.nextToken().trim(); }
      }

      if (!myBufferedInput.ready()) break;
    }

    System.out.println("Emplacements actuellement interdits :");
    for (r=0; r=maxconn) connections=0;
        }

        if (users[connections]==null) // si l'utilisateur n'existe pas.
        { okey=1; // on donne la valeur 1 à okey.
          for(r=0; r=0)
          {
          System.out.print("Tentative pour: ");
          System.out.println(mysocket.getInetAddress().getHostName());
          myoutput.write(
          "telnet: Incapable de se relier au centre serveur à distance: Connexion refusée!\n\r".getBytes());
          myoutput.close();
          mysocket.close();
          okey=0;  // comme il y a eu erreur on remet okey à 0.
          r=banptr+5;
          }
         }

          if (okey==1)
          { if (debug==1)
            { System.out.print("Objet nul trouvé. Connexion depuis: "+connections+" ");
              System.out.println(mysocket.getInetAddress().getHostName());
            }
            users[connections]=new User(mysocket,connections);  // Création de l'utilisateur
            while (users[connections].inuse==3);
            connections++;
            if (connections>=maxconn) connections=0;
          }
        }
          else // si le nombre maximum (maxconn) est atteint on ne peut pas rajouter un utilisateur.
        {  myoutput.write("Désolé...le serveur de chat est plein...".getBytes());
           myoutput.close();
           mysocket.close();
        }
      }
    }
  }

  synchronized int channel(int ID,String Name)
  {
  int r,curr;
//    if (Name.equals("Hidden Cave")) Name="1"+(myRandom.nextInt()%1000);
if ((Name.equals("0") || Name.equals("Principal")) || Name.equals("principal")) Name="Principal";
if ((Name.equals("1") || Name.equals("Sorties")) || Name.equals("sorties")) Name="Sorties";
if ((Name.equals("2") || Name.equals("Co-Voiturage")) || Name.equals("co-voiturage")) Name="Co-Voiturage";
if ((Name.equals("3") || Name.equals("Spectacles")) || Name.equals("spectacles")) Name="Spectacles";

    // Utilisateur déjà dans le salon.
    if (Name.equals(channels[users[ID].channel])) return -2;

    for (r=1; r<maxconn; r++) // Salon fermé
      if (Name.equals(channels[r]) && (cflags[r]&1)==1) return -1;

    curr=users[ID].channel;  // Salon courant de l'utilisateur

    if (curr!=0)           // s'il n'est pas dans Principal
    {  for (r=0; r<maxconn; r++)
         if (users[r]!=null) // si utilisateur r existe.
           // on met r=1006 si le salon de l'utilisateur r est le même que celui du utilisateur courant
           // c'est à dire que le salon n'est pas vide quand le courant va le quitter.
           if (users[r].channel==curr && r!=ID) r=maxconn+6;

       if (r<maxconn+2)  // si la condition précédente n'est pas réalisée! (donc r<1002)
         // donc si le salon est vide on le ferme.
       { channels[curr]=null; channelop[curr]=-1; cflags[curr]=0; }
    }
    for(r=0; r<=maxconn; r++)
      if (Name.equals(channels[r])) return r;
    for (r=1; r<=maxconn; r++)
    { if (channels[r]==null)
      { channels[r]=Name;
        if ((!Name.equals("Sorties")) || (!Name.equals("Co-Voiturage"))
            || (!Name.equals("Spectacles"))) channelop[r]=ID;
        return r;
      }
    }
    return users[ID].channel;
  }

  public void sendpriv(int ID,int OID,String mess) throws Exception
  {              // ID est le destinataire; OID l'expéditeur.
     if (debug==1) System.out.println("TO: "+ID+" FROM: "+OID+" MESSAGE: "+mess);
     if(ID<maxconn)  // si le numéro du destinataire est un numéro valide.
     {
       if(users[ID]!=null)  // si le destinataire est connecté.
       { users[ID].message(mess,1); // un message est envoyé au destinataire.
         if ((users[OID].uflags&16)==0)
         { users[OID].message("<"+users[ID].UserName+">"+". \n\r",0); }
           else
         { users[OID].message("<"+users[ID].UserName+"> "+mess,0); }
       }
         else      // si le destinataire n'est pas connecté.
       { users[OID].message(">> Cette personne n'est pas là.\n\r",0); }
     }
       else    // si le numéro du destinataire n'est pas un numéro valide.
     { users[OID].message(">> Cette personne n'est pas là.\n\r",0); }
  }

  synchronized void sendall(int ID,String mess) throws Exception
  {
  int r;
    for(r=0; r<maxconn; r++)
    { if(users[r]!=null)   // si l'utilisateur existe
      if (ID==-1) users[r].message(mess,0);
        else
      if ((users[r].gags[ID]&1)==0) users[r].message(mess,0);
    }
  }

  synchronized void yell(int ID,String mess) throws Exception
  {
  int r;
    for(r=0; r<maxconn; r++)
    { if(users[r]!=null)  // si l'utilisateur existe.
      { if ((users[r].gags[ID]&1)!=1)
          if ((users[r].uflags&8)==0) users[r].message(mess,0);
      }
    }
  }

  public int ConvNum(String myString)
  {
  int r=0,out=0;
    if (myString==null) return -1;  // si la chaine est nulle on retourne -1.
    myString=myString+(char)0; // on place (char)0 à la fin de la chaine.
    while(myString.charAt(r)!=(char)0 && // tant que le caractere de la chaine est différent de (char)0.
         (myString.charAt(r)>='0' && myString.charAt(r)<='9')) //et que c'est un chiffre.
    { out=out*10+((byte)myString.charAt(r)-48);
      r++;
    }

    if (myString.charAt(r)!=(char)0) { return -1; }
      else
    { return out; }
  }

  synchronized void sendallbut(int ID,String mess) throws Exception
  {
  int r;
    for(r=0; r<maxconn; r++)
      // si l'utilisateur est différent de celui à qui l'on envoie pas, et existe.
    { if(users[r]!=null && r!=ID)
      if (ID==-1) users[r].message(mess,0);
        else
      if ((users[r].gags[ID]&1)==0) users[r].message(mess,0);
    }
  }

  synchronized void sendchan(int ID,int channel,String mess) throws Exception
  {
  int r;
    for(r=0; r<maxconn; r++)
      // si l'utilisateur est dans le salon et existe.
    { if(users[r]!=null && users[r].channel==channel)
      if (ID==-1) users[r].message(mess,0);
        else
      if ((users[r].gags[ID]&1)==0) users[r].message(mess,0);
    }
  }

  synchronized void sendchanbut(int ID,int channel,String mess) throws Exception
  {
  int r;
    for(r=0; r<maxconn; r++)
      // si l'utilisateur est différent de celui à qui l'on envoie pas, est dans le salon, et existe.
    { if((users[r]!=null && users[r].channel==channel) && r!=ID) users[r].message(mess,0);
    }
  }

// Liste des utilisateurs par salon avec details
  public void showme(int ID,String grep)
  {
  String myString,thisString,temp;
  int r,t,c,len,n;
  Date myDate=new Date();
  thisString="";

    c=0;
    myString="Nom                     Salon         Temps de connexion\n\r";
    for(r=0; r<maxconn; r++)
    { if (users[r]!=null)
      { // Tout d'abord on met le nom d'utilisateur!
        thisString=thisString+users[r].UserName;
        len=23-thisString.length();
        for(t=0; t<=len; t++) thisString=thisString+" ";
        if ((users[r].gags[ID]&1)==1) thisString=thisString+"I";
          else
/*        if ((users[r].uflags&8)==8) thisString=thisString+"H";
          else thisString=thisString+"-";
*/
        if ((users[ID].gags[r]&1)==1) thisString=thisString+"i";
          else
/*
        if ((users[r].uflags&1)==1) thisString=thisString+"B";
          else thisString=thisString+"-";
*/
        if (channelop[users[r].channel]==r && users[r].channel!=0) thisString=thisString+"P";
          else thisString=thisString+"-";

        if ((cflags[users[r].channel]&1)==1) thisString=thisString+"F";
          else thisString=thisString+"-";

        if ((users[r].uflags&4)==4) thisString=thisString+"S";
          else thisString=thisString+"-";

/*        if ((n=ConvNum(channels[users[r].channel]))>=1000 && n<=1999)
        { thisString=thisString+" Hidden Cave"; }
          else
*/
        { thisString=thisString+"   "+channels[users[r].channel]; }
        len=38-thisString.length();
        for(t=0; t<=len; t++) thisString=thisString+" ";
        // Calcul de l'écart entre le temps de connexion et maintenant.
        temp=DiffTemps(myDate.getTime(),users[r].idletime);
        // Temps depuis la connexion de l'utilisateur
        if (temp.length()<3) thisString=thisString+" ";
        thisString=thisString+temp;
        len=38-thisString.length();
        for(t=0; t<=len; t++) thisString=thisString+" ";
//        thisString=thisString+users[r].location;
        thisString=thisString+" \n\r";
/*
        if (grep!="")
        { if (thisString.indexOf(grep)>=0) { myString=myString+thisString; c++; }}
          else
*/          // Dans c on calcule le nombre de connectés
        { myString=myString+thisString; c++; }
      }
    }
    myString=myString+"-------------------------------------------------------------- \n\r";
    // Nombre de connectés
    myString=myString+"Nombre de connectés : "+c+" \n\r\n\r";
    // On envoie la liste à l'utilisateur qui l'a demandé!
    try { users[ID].message(myString,0); } catch (Exception e) {}
  }

// Etablit la liste des connectés, un par ligne.
  public void Connectes(int ID)
    {String myString="",thisString="";
     int c,r;
      myString="Liste des connectés : \n\r";
      c=0;
      for(r=0; r<maxconn; r++)
      { if (users[r]!=null)
        { c++;
          thisString=users[r].UserName+"\n\r";
          myString=myString+thisString;
        }
      }
      try { users[ID].message(myString,0); } catch (Exception e) {}
     }

// Etablit la liste des connectés
  public void Liste(int ID)
  {String myString="",thisString="";
   int c,r,t;

    myString="---------------------------------------------------------------------\n\r";
    c=0;
    for(r=0; r<maxconn; r++)
    { if (users[r]!=null)
      { c++;
        thisString=users[r].UserName;
        myString=myString+" "+thisString;
         // Pour qu'il n'y ait que 3 utilisateurs par lignes.
        if (c%3!=0)
        { for(t=0; t<23-thisString.length(); t++) myString=myString+" "; }
          else
            // s'il y en a trois on revient à la ligne.
        { myString=myString+"\n\r"; }
      }
    } // Revient à la ligne avant le trait de séparation
    if (c%3!=0) myString=myString+"\n\r";
      // Trait de séparation
    myString=myString+"---------------------------------------------------------------------\n\r";
      // Nombre de connectés
    myString=myString+"Nombre de connectés au total : "+c+" \n\r\n";
      // Envoi du message contenant la liste à l'utilisateur qui l'a demandé!
    try { users[ID].message(myString,0); } catch (Exception e) {}
  }

// Renvoie le détail de l'écart entre deux temps donnés
  public String DiffTemps(long time1,long time2)
  {long temp;
   String outString="";
    // Inversion de time1 et time2 pour avoir le + grand dans time1
    if (time1<time2) { temp=time1; time1=time2; time2=temp; }
    // temp contient la différence
    temp=time1-time2;
    // divisée par 1000
    temp=temp/1000;
    // les secondes
    if (temp!=0) outString=(temp%60)+"s"+outString;
    temp=temp/60;
    // les minutes
    if (temp!=0) { outString=(temp%60)+"m"; temp=temp/60; }
    // les heures
    if (temp!=0) { outString=(temp%60)+"h"; temp=temp/60; }
    // les jours
    if (temp!=0) { outString=(temp%24)+"j"; temp=temp/24; }
    // les années
    if (temp!=0) { outString=(temp%365)+"a"; temp=temp/365; }
    return outString;
  }

  public void help(int ID) throws Exception
  {
  String myString;

    myString="Liste des commandes: (vous pouvez remplacer '.' par ',' ou '/' )\n\r"+
             "-----------------------------------------------------------------------------------\n\r"+
             ".l                                Liste des connectés\n\r"+
             ".d                                Liste des connectés avec détails\n\r"+
             ".c nom du salon                   Changer de salon \n\r"+
             ".a                                Infos sur les salons\n\r"+
             ".q                                Quitter\n\r"+
             ".f                                Fermer un salon\n\r"+
             ".o  numéro du déstinataire        Donner la propriété du salon\n\r"+
             ".t                                Quelle heure est-il?"+
             ".s  numéro du déstinataire        Rendre silencieux un utilisateur du salon\n\r"+
             ".i  numéro du déstinataire        Ignorer(ou autoriser) un utilisateur du salon\n\r"+
             ".k  numéro du déstinataire        Virer un utilisateur gênant du salon\n\r"+
             ".p  numéro du déstinataire        Envoyer un message privé\n\r"+
             ".help                             Aide\n\r"+
             ": or ;                            Chuchoter dans un message\n\r";
      // Envoie de la liste des commandes à l'utilisateur qui a demandé l'aide!
    users[ID].message(myString+"\n\r",0);
  }
}



CELUI DE LA CLASSE USER :


package tutu;

import java.net.*;
import java.util.*;
import java.io.*;

public class User extends javachat implements Runnable
{
String location,myString,heure;
String UserName="unknown";
InputStream myinput;
OutputStream myoutput;
InputStreamReader myReader;
BufferedReader myInputStream;
Socket mysocket;
int ID,r;
Thread myThread;
byte[] buffer=new byte[2048];
int channel=0,uflags=0;
char[] gags=new char[super.maxconn];
Date myDate=new Date();
Date maDate;
long logontime,idletime,spamtime;
int sysop=0;
int spam=0;
int inuse=3;   // inuse = 3 pour connecté et 2 pour déconnecté!

  public User(Socket mysocket,int ID) throws Exception
  {int ok;
    ok=1;
    inuse=1;
    this.mysocket=mysocket;
    myinput=mysocket.getInputStream();
    myoutput=mysocket.getOutputStream();
    myReader=new InputStreamReader(myinput);
    myInputStream=new BufferedReader(myReader);

    try { DisplayFile(myoutput,"Bienvenue.txt"); }
    catch (Exception e)
    {
      if (super.debug==1) System.out.println("Problème de connexion : "+e.toString());
      ok=0;
    }

    if (ok==1)
    { try { location=mysocket.getInetAddress().getHostName(); }
      catch(Exception e) { System.out.println("Messed up."); }
      //si la chaine contient un point, on coupe avant.
      if (location.indexOf('.')>0)
      { UserName=location.substring(0,location.indexOf('.'));
      //si la chaine contient + de 14 caracteres, on coupe a 14.
        if (UserName.length()>13) UserName=UserName.substring(0,13);
      }
        else
      { UserName=location; }
      this.ID=ID;

      logontime=myDate.getTime();
      idletime=logontime;
      spamtime=logontime;

      myThread=new Thread(this);
      myThread.setPriority(Thread.MIN_PRIORITY);
      myThread.start();
    }
      else
    { inuse=0;
      super.users[ID]=null;}
  }

// Arret du Thread
  public void stop()
  { myThread.destroy();}

// Tentative de lancement du chat
  public void run()
  { try { chat(); }
    catch (Exception e)
    { if (super.debug==1) System.out.println("Problème dans run() :"+e.toString());
      leave(1);
    }
  }

  public void chat() throws Exception
  {
  String thisString,myString,outString="";
  char ch,ch1;
  int len,t;

    inuse=1;
/*
    //Nouvelle connexion annoncée à tout le monde
    super.sendallbut(ID,">> Nouveau connecté :"+location+"\n\r");
*/
    //Annonce de votre nouvelle connexion
    message(">>"+heure+" Vous vous êtes connecté comme : "+location+"\n\r",0);
    while(true)
      // Boucle infinie pour tester le contenu du texte entré par l'utilisateur.
    { //Calcul de l'heure actuelle
      maDate=new Date();
      heure=maDate.toLocaleString();
      heure=heure.substring(heure.length()-8);

      try { outString=myInputStream.readLine(); }
      catch (Exception e)
      { if (debug==1) System.out.println(heure+"Connexion perdue: "+UserName+" "+e.toString());
        inuse=2;
        leave(1);
      }
/*    // Deconnexion en cas de message vide...
      if (outString==null)
      { if (super.debug==1) { System.out.println("La ligne "+ID+" a laissé tomber la connexion."); }
        inuse=2;
        leave(1);}
*/
      if (myDate.getTime()-spamtime<500)
      { if (outString.trim().length()>0) spam++; }
        else
      { spam=0; }

      if (spam==4)
      {	message(">>"+heure+" Deconnexion automatique pour cause de spam!\n\r",0);
        leave(0);}

      spamtime=myDate.getTime();

//      if (outString==null) leave(1);
      thisString="";
      myDate=new Date();
      idletime=myDate.getTime();

      if (international==0)
      { for (t=0; t<outString.length(); t++)
        { if (((char)outString.charAt(t)>31 && (char)outString.charAt(t)<216)
             && (char)outString.charAt(t)!=155) thisString=thisString+outString.charAt(t);
        }
      }
        else
      { for (t=0; t<outString.length(); t++)
        { if (((char)outString.charAt(t)>31 && (char)outString.charAt(t)<255)
             && (char)outString.charAt(t)!=155) thisString=thisString+outString.charAt(t);
        }
      }

      outString=thisString;
      if (debug==1) System.out.println(heure+"Lire en "+outString.length()+" bytes.");
      outString=outString+"\n\r";
      if (debug==1) System.out.print(heure+" "+UserName+" de type: "+outString);
      if (outString.charAt(0)=='\r' && debug==1) System.out.println(heure+" Avertissement de linefeed");
      ch=outString.charAt(0);
      if (ch=='.' || (ch==',' || ch=='/'))
      { ch=outString.charAt(1);
        ch1=outString.charAt(2);
        outString=outString.substring(2);
        outString=outString.trim();

           // Pour changer de nom, sera utilisée seulement lors de l'ouverture!
        if (ch=='n')
             if (UserName!=null)
                { if (outString.length()!=0)
                  { UserName=outString;
                    if (UserName.length()>13) UserName=UserName.substring(0,13);
                    // Comme le nom ne pourra pas être changé il est inutile de leur annoncer leur nom.
                    //message(">> Votre nom est maintenant : "+UserName+"\n\r",0);
                  }
                    else { message(">> Nom illégal. \n\r",0); }
                    // Dans la connexion en php l'utilisateur ne peut pas entrer
                    // un login de + de 14 caractères donc le problème ne devrait pas se présenter!
                }
              else message(">>"+heure+" Instruction incompréhensible... taper .help pour l'aide. \n\r",0);
          else

            // Pour voir la liste des connectés par salon avec détails
        if (ch=='d') super.showme(ID,outString.trim());
          else

            //liste des utilisateurs
        if (ch=='l') super.Liste(ID);
           else

             //Lancement de l'affichage de la liste des connectés
         if (ch=='z') super.Connectes(ID);
            else

            //Quitter
        if (ch=='q') leave(0);
          else

                 // Appel de l'aide
        if (ch=='h' && ch1=='e')
        { super.help(ID);}
          else

            // Donne les infos sur les salons.
        if (ch=='a')
        { channelinfo();}
          else

            // Ferme le salon si possible.
        if (ch=='f')
        { // si il s'agit du salon Principal ou que l'utilisateur n'est pas propriétaire,
          // c'est impossible de fermer le salon.
          if (super.channelop[channel]!=ID || channel==0)
          { message(">>"+heure+" Ce salon n'est pas le votre. Vous ne pouvez pas le fermer.\n\r",0); }
            else
          { super.cflags[channel]=super.cflags[channel]^1;
            if ((super.cflags[channel]&1)==1)
            { sendchan(-1,channel,">>"+heure+" Le salon est maintenant fermé.\n\r"); }
              else
            { sendchan(-1,channel,">>"+heure+" Le salon n'est pas fermé.\n\r"); }
          }
        }
          else

        if (ch=='o')
        { r=getNum(outString);
          //si le numéro d'utilisateur retourné par getNum est -1, l'opération est impossible.
          if (r==-1)
          { message(">>"+heure+" Instruction incompréhensible... taper .help pour l'aide. \n\r",0); }
            else
              // Si on n'est pas proprio ou qu'il s'agit du salon Principal, c'est impossible.
          if (super.channelop[channel]!=ID || channel==0)
          { message(">>"+heure+" Vous ne pouvez pas posséder ce salon.\n\r",0); }
            else
              // Si l'on possède le salon, on ne peut pas se redonner la possession.
          if (r==ID)
          { message(">>"+heure+" Vous possédez déjà ce salon.\n\r",0); }
            else
              // L'utilisateur n'existe pas.
          if (r>maxconn)
          { message(">>"+heure+" Cette personne n'est pas dans le salon!\n\r",0); }
            else
              // L'utilisateur n'existe pas.
          if (super.users[r]==null)
          { message(">>"+heure+" Cette personne n'est pas dans le salon!\n\r",0); }
            else
              // L'utilisateur n'est pas dans le salon.
          if (super.users[r].channel!=channel)
          { message(">>"+heure+" Cet utilisateur n'est pas dans votre salon!\n\r",0); }
            else
              // Le changement de propriétaire est annoncé.
          { super.channelop[channel]=r;
            sendchan(-1,channel,">>"+heure+" "+super.users[r].UserName+" est le nouveau propriétaire du salon.\n\r");
          }
        }
          else
                 // Ré-autoriser un utilisateur du salon.
        if (ch=='s')
        { if (super.channelop[channel]==ID && channel!=0)
          {r=getNum(outString);
            if (r==-1)
            { message(">>"+heure+" Instruction incompréhensible... taper .help pour l'aide. \n\r",0); }
              else
                // Utilisateur inexistant
            { if (r>=maxconn)
              { message(">>"+heure+" Cet utilisateur n'est pas dans votre salon! \n\r",0); }
                else
                // Utilisateur inexistant
              if (super.users[r]==null)
              { message(">>"+heure+" Cet utilisateur n'est pas dans votre salon! \n\r",0); }
                else
                // Utilisateur dans le salon
              if (super.users[r].channel==channel)
              { if ((super.users[r].uflags&4)==4)
                // s'il était banni, on le ré-autorise
                { super.users[r].message(">>"+heure+" Vous avez été ré-autorisé à parler dans ce salon. \n\r",0);
                  message(">>"+heure+" Vous avez autorisé "+super.users[r].UserName+". \n\r",0);
                }
                  else // s'il était autorisé, on le banni
                { super.users[r].message(">>"+heure+" Vous êtes silencieux! On ne peut plus vous lire dans ce salon.\n\r",0);
                  message(">>"+heure+" Vous avez rendu silencieux "+super.users[r].UserName+". \n\r",0);
                 }
                super.users[r].uflags=super.users[r].uflags^4;
              }
                else
              { message(">>"+heure+" Cet utilisateur n'est pas dans votre salon! \n\r",0); }
            }
          }
            else
          { message(">>"+heure+" Vous ne possédez pas ce salon. Vous ne pouvez pas rendre silencieux! \n\r",0); }
        }
          else

         // Changer de salon
        if (ch=='c')
        { if (outString.length()>0)
          { if (outString.length()>14) outString=outString.substring(0,14);

            if (super.channels[channel].equals("Sorties")) { t=1;}
            else
            if (super.channels[channel].equals("Co-Voiturage")) { t=2;}
            else
            if (super.channels[channel].equals("Spectacles")) { t=3;}
              else { t=0; }
            r=super.channel(ID,outString);
            if (r==-2)
            { message(">>"+heure+" Vous êtes déjà dans le salon "+outString+". \n\r",0); }
              else
            if (r==-1)
            { message(">>"+heure+" Le salon est fermé. Désolé.\n\r",0); }
              else
                // Abandon de la propriété du salon
            { if (channelop[channel]==ID) channelop[channel]=-1;

              if (t==1)
              { super.sendchanbut(ID,channel,">>"+heure+" Le propriétaire du salon est parti.\n\r"); }
                else
              if (t==2)
               { super.sendchanbut(ID,channel,">>"+heure+" Le propriétaire du salon est parti.\n\r"); }
                else
              if (t==3)
               { super.sendchanbut(ID,channel,">>"+heure+" Le propriétaire du salon est parti.\n\r"); }

              channel=r;

            }
          }
            else  // si le nom du salon demandé est nul, on lui rappele dans quel salon il est.
          { message(heure+" Vous êtes dans le salon "+super.channels[channel]+". \n\r",0); }
        }
          else

            // Quelle heure est-il?
        if (ch=='t')
        { message(">> Au top, il sera: "+heure+"\n\r",0);
        }
          else

            // Ignorer un utilisateur
        if (ch=='i')
        { r=getNum(outString);
          if (r==-1) //le numéro de l'utilisateur n'est pas sous la forme d'un entier.
          { message(">>"+heure+" Instruction incompréhensible... taper .help pour l'aide. \n\r",0); }
            else
          { if (r==ID) // si l'utilisateur donne son numéro.
            { message(">>"+heure+" Vous ne pouvez pas vous ignorer vous même! \n\r",0); }
              else
            if (r>=maxconn) // si le numéro ne correspond pas à un utilisateur.
            { message(">>"+heure+" Cette personne n'est pas connectée!\n\r",0); }
              else
            if (super.users[r]==null) // si le numéro ne correspond pas à un utilisateur.
            { message(">>"+heure+" Cette personne n'est pas connectée!\n\r",0); }
              else // changement de l'état bâillon.
            { gags[r]=(char)((int)gags[r]^1);
              if ((gags[r]&1)==1)
              { message(">>"+heure+" Vous avez ignoré "+super.users[r].UserName+"!\n\r",0); }
                else
              { message(">>"+heure+" Vous n'ignorez plus "+super.users[r].UserName+"!\n\r",0); }
            }
          }
        }
          else

        if (ch=='k')
        {    // vérifie que l'utilisateur possède bien le salon et qu'il ne s'agit pas du Principal.
          if (super.channelop[channel]==ID && channel!=0)
          { r=getNum(outString);
            if (r==-1) // s'il ne s'agit pas d'un entier.
            { message(">>"+heure+" Instruction incompréhensible... taper .help pour l'aide. \n\r",0); }
              else
            { if (r>=maxconn)  // s'il ne s'agit pas d'un utilisateur.
              { message(">>"+heure+" Cet utilisateur n'est pas dans votre salon! \n\r",0); }
                else
              if (super.users[r]==null) // s'il ne s'agit pas d'un utilisateur.
              { message(">>"+heure+" Cet utilisateur n'est pas dans votre salon! \n\r",0); }
                else   // vérifie que l'utilisateur à virer est bien dans le salon.
              if (super.users[r].channel==channel)
              {
        // changement de salon
                t=super.channel(r,"0");
                super.sendchanbut(r,channel,">>"+heure+" "+super.users[r].UserName+
                                  " a été expulsé de ce salon. \n\r");
                super.users[r].message(">>"+heure+" "+UserName+" vous a expulsé de ce salon.\n\r",0);
                super.users[r].channel=t;
                super.users[r].uflags=super.users[r].uflags&65531;
//                l'utilisateur arrive dans Principal
//                super.sendchan(r,0,">> "+super.users[r].UserName+" a rejoint le salon. \n\r");
              }
                else  // L'utilisateur a virer n'est déjà pas dans le salon.
              { message(">>"+heure+" Cet utilisateur n'est pas dans votre salon! \n\r",0); }
            }
          }
            else  // Impossible de virer si on est pas propriétaire.
          { message(">>"+heure+" Vous ne dirigez pas ce salon.  Vous ne pouvez donc pas expulser quelqu'un! \n\r",0); }
        }
          else

                // Message privé
        if (ch=='p')
        { r=getNum(outString);
          outString=strip(outString); // renvoi le texte à envoyer.
          if (r>=maxconn)  // si le numéro ne correspond pas à un utilisateur.
          { message(">>"+heure+" Cette personne n'est pas là.\n\r",0); }
            else
          if (r!=-1)
          { if (outString.length()==0) outString=" "; // si la chaine est vide, on y met un espace.
            if (super.users[r]==null)  // si le numéro ne correspond pas à un utilisateur.
            { message(">>"+heure+" Cette personne n'est pas là.\n\r",0); }
              else    // si le destinataire a ignoré l'expéditeur.
            if ((super.users[r].gags[ID]&1)==1)
            { message(">>"+heure+" Cette personne vous a ignoré!\n\r",0); }
              else
                // on enlève si il y a : ou ; au début
            if (outString.charAt(0)==':' || outString.charAt(0)==';')
            { outString=outString.substring(1,outString.length());
              outString=outString.trim();
              if (outString.length()==0) outString=" "; // on réinsert un espace si la chaine devient nulle
              super.sendpriv(r,ID," > ("+UserName+") "+outString+"\n\r");
            }
              else
            { super.sendpriv(r,ID," > ("+UserName+") (chuchotant): "+outString+"\n\r"); }
          }
            else   // si il ne s'agit pas d'un entier.
          { message(">>"+heure+" Instruction incompréhensible... taper .help pour l'aide. \n\r",0); }
        }
          else  // si le caractère qui suit le . , ou / ne correspond pas à une commande.
        { message(">>"+heure+" Instruction incompréhensible... taper .help pour l'aide. \n\r",0); }
      }
        else

      if (ch==':' || ch==';')
        // enlève le caractère de commande
      { outString=outString.substring(1,outString.length()-1);
        outString=outString.trim();
        // si la chaine n'est pas vide ou ne débute pas par \ on ajoute un espace au début.
        if (outString.length()!=0 && outString.charAt(0)!='\'') outString=" "+outString;
        if ((uflags&4)!=4)
        { if ((super.channels[channel].equals("Sorties")) || (super.channels[channel].equals("Spectacles"))
               || (super.channels[channel].equals("Co-Voiturage")))
          { super.sendchan(ID,channel,UserName+"(Chuchotant)"+outString+"\n\r"); }
            else  // s'il n'est pas dans un des salon ci-dessus il est dans Principal
          { super.sendchan(ID,channel,UserName+" (Chuchotant) "+outString+"\n\r"); }
        }
          else
        { message(">>"+heure+" Vous êtes silencieux dans ce salon. Personne ne peut vous entendre! \n\r",0); }
      }
        else
      { outString=outString.trim()+"\n\r";
        if (outString.length()>2)
        { if ((uflags&4)!=4)
            { if ((super.channels[channel].equals("Sorties")) || (super.channels[channel].equals("Spectacles"))
               || (super.channels[channel].equals("Co-Voiturage")))
            { super.sendchan(ID,channel,UserName+" (Chuchotant) "+outString); }
              else  // s'il n'est pas dans un des salon ci-dessus il est dans Principal
            { super.sendchan(ID,channel,UserName+" (Chuchotant) "+outString); }
          }
            else
          { message(">>"+heure+" Vous êtes silencieux dans ce salon. Personne ne peut vous entendre! \n\r",0); }
        }
      }
    }
  }

// Retourne sous forme d'entier le nombre écris dans une chaîne de caractère.
  public int getNum(String myString)
  { int r,len,out=0;
    r=0;
    len=myString.length();
    while ((r<len && true) && (myString.charAt(r)>='0' && myString.charAt(r)<='9'))
    { out=out*10+((byte)myString.charAt(r)-48);
      r++;}
    if (r==0) return -1;
    myString=myString.substring(r,myString.length());
    return out;
  }

// Affiche les propriétés des salons (propriétaire et fermeture)
  public void channelinfo()
  {
  String thisString,myString;
  int len,t,r;

    myString="Propriétés des salons à : "+heure;
    myString=myString+"------------------------------------------\n\r";
    myString="Salons          Proprio             Fermé\n\r";
    myString=myString+"------------------------------------------\n\r";
    myString=myString+"Principal    Personne               Non\n\r";

    for(r=1; r<=super.maxconn; r++)
    {
      if (super.channels[r]!=null && !super.channels[r].equals("Sorties"))
      {
        if ((t=ConvNum(super.channels[r]))<1000 || t>=2000)
        {
          thisString=super.channels[r];
          len=12-thisString.length();
          // met des espaces jusqu'à ce que la longueur du String soit 13
          for(t=0; t<=len; t++) thisString=thisString+" ";

          if (super.channelop[r]>=0)
          {
            thisString=thisString+" "+super.users[super.channelop[r]].UserName;
          }
            else
          { thisString=thisString+"Personne"; }
          len=35-thisString.length();
          // met des espaces jusqu'à ce que la longueur du String soit 36
          for(t=0; t<=len; t++) thisString=thisString+" ";
          if ((super.cflags[r]&1)==1) thisString=thisString+"Oui";
            else thisString=thisString+"Non";
          myString=myString+thisString+"\n\r";
        }
      }
    }
    try { message(myString+"\n",0); }
    catch (Exception e) { System.out.println("Erreur: "+e.toString()); }
  }
//    Enleve les chiffres au début de la chaîne
  public String strip(String myString)
  {
  int r=0;
  myString=myString+" ";
  while(myString.charAt(r)>='0' && myString.charAt(r)<='9') r++;
  return myString.substring(r).trim();
  }

// Ecriture dans le OutPutStream
  synchronized void message(String mess,int att) throws Exception
  {if (inuse==1)
    { if (att==1)
      { if ((uflags&1)!=0) mess=(char)7+mess;
        if ((uflags&2)!=0)
        { myoutput.write((byte)27);
          mess="[1m"+mess+(char)27+"[0m";}
        myoutput.write(mess.getBytes());
      }
        else{ myoutput.write(mess.getBytes()); }
    }
  }

// Fichier graphique
  public void DisplayFile(OutputStream myoutput,String FileName) throws Exception
  {
  File fichier=new File(FileName);
  InputStream myfileinput=new FileInputStream(fichier);
  byte[] input=new byte[(int)fichier.length()];
  myfileinput.read(input);
  myoutput.write(input);
  }

// Fonction pour déconnecter
  public void leave(int p)
  { System.out.println("Essai de tuer "+ID);
    if (p==0)  // Si le paramètre est nul l'utilisateur est déconnecté et reçoit : Au revoir!
    { try { message(">> Au revoir!\n\r",0); } catch (Exception e) {} }
    inuse=2;
    kill();
    super.users[ID]=null;
    myThread.stop();
  }

// Fermeture d'un utilisateur
  public void kill()
  {
  int r,curr;
    myThread.setPriority(Thread.MAX_PRIORITY);
    curr=channel;
    if (curr!=0) //Si curr différent de 0, l'utilisateur n'est pas dans le salon Principal
    {
      if (super.channelop[curr]==ID) super.channelop[curr]=-1;
      //si l'utilisateur qui part était propriétaire du salon, il n'y a plus de propriétaire au salon (-1).

      for (r=0; r<maxconn; r++)
        if (super.users[r]!=null) //si l'utilisateur à ce numéro d'ID est connecté
          if (super.users[r].channel==curr && r!=ID) r=maxconn+6;
          // si l'utilisateur au numéro est dans le salon curr et ne correspond pas à l'utilisateur actuel
          // alors on arrete la recherche et r=1006

      if (r<maxconn+2) // si r<1002 (donc que la condition au dessus n'est pas vérifiée
      { channels[curr]=null; channelop[curr]=-1; cflags[curr]=0; }
      //On ferme le salon car il n'y a pas d'utilisateurs connectés.
      }

    for (r=0; r<maxconn; r++) if (super.users[r]!=null) super.users[r].gags[ID]&=0;

    try
    { myinput.close();
      myoutput.close();
      mysocket.close();
    }
    catch (Exception e) { System.out.println("Problème pour la fermeture de l'utilisateur: "+e.toString()); }

// Pour tous les salons dont le priopriétaire était l'utilisateur qui part, il n'y a plus de prioprio (-1).
    for (r=0; r<maxconn; r++)
    { if (super.channelop[r]==ID) super.channelop[r]=-1; }
  }
}


ET LES ERREURS KAN JE FAIS : java javachat SOUS DOS:

Exception in thread "main" java.lang.NoClassDefFoundError: javachat (wrong name:
tutu/javachat)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)

5 réponses

Messages postés
210
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
18 décembre 2003
7
bonjour,
je pense qu il n y a pas d erreur dans ton programme
simplement essaye de le lancer avec:
java tutu.javachat

benohite
:big)
Messages postés
9
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
25 juillet 2003

t un genie ben merci
tu saurais pas par hasard pkoi mon applet veut pas s'fficher dans ma page html alors ke je l'affiche a partir de jbuilder? Eske ca peut etre un prob du meme genre?
Merci beaucoup en tout cas! je passe plu pour un con aupres du chef maintenant! encore merciiiiiiiiiiiiiiiiiiii
lol
nico
Messages postés
210
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
18 décembre 2003
7
je suis désolé mais j ai jamais fait d applet donc sur ce sujet je suis un peu hors coup

benohite
:big)
Messages postés
9
Date d'inscription
vendredi 16 mai 2003
Statut
Membre
Dernière intervention
25 juillet 2003

t plu un genie alors! lol
non je plaisante merci beaucoup kan meme de t'etre interesse a mon prog et a bientot des ke g besoin d'aide! lol
nico ki commence a adorer ce site!
Messages postés
210
Date d'inscription
vendredi 11 avril 2003
Statut
Membre
Dernière intervention
18 décembre 2003
7
pas de pb si je peux t aider je le ferais

benohite
:big)