private void listUsers(CommandArgsIterator args_it) throws IOException 
    {
        if (args_it.hasNext()) {
            String chan_arg = args_it.next();
            if (!args_it.hasNext() && chan_arg.length() >= 2
                    && chan_arg.charAt(0) == '#') {
                String chan_name = chan_arg.substring(1);
                Map<String, Chan> chans = this._server.getChans();
                String[] user_names;
                synchronized (chans) {
                    Chan chan = chans.get(chan_name);
                    if (chan != null) {
                        Map<String, Client> users = chan.getUsers();
                        synchronized (users) {
                            user_names = users.keySet().toArray(new String[0]);
                        }
                    } else
                        user_names = null;
                }
                
                if (user_names != null) {
                    Command cmd;
                    if (user_names.length > 0) {
                        StringBuilder args = new StringBuilder();
                        for (String name : user_names) {
                            args.append(' ');
                            args.append(name);
                        }

                        cmd = new Command('I', args.toString().substring(1));
                    } else
                        cmd = new Command('I', "");
                    
                    this.traceEvent(
                        "Listage des utilisateurs de #" + chan_name
                    );
                    this.writeCommand(cmd);
                    this.ack();
                } else
                    this.writeCommand(Errors.ChanNotFound);
            } else 
                this.syntaxError();
        } else
            this.syntaxError();
    }