Package xnap.plugin.nap.util

Source Code of xnap.plugin.nap.util.PrivateChannel

/*
*  XNap
*
*  A pure java file sharing client.
*
*  See AUTHORS for copyright information.
*
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*/
package xnap.plugin.nap.util;

import xnap.net.AbstractChannel;
import xnap.net.IUser;
import xnap.plugin.nap.net.Server;
import xnap.plugin.nap.net.User;
import xnap.plugin.nap.net.msg.ExceptionListener;
import xnap.plugin.nap.net.msg.MessageHandler;
import xnap.plugin.nap.net.msg.client.PrivateMessage;
import xnap.plugin.nap.net.msg.server.GlobalMessage;
import xnap.plugin.nap.net.msg.server.MessageListener;
import xnap.plugin.nap.net.msg.server.ServerMessage;
import xnap.util.Preferences;

import java.io.IOException;

/**
* Manages a list of channels.
*/
public class PrivateChannel extends AbstractChannel
    implements MessageListener, ExceptionListener
{

    //--- Constant(s) ---

    /**
     * Time to wait for global error message.
     */
    public static final int ERROR_WAIT = 3 * 1000;

    //--- Data field(s) ---

    private static Preferences prefs = Preferences.getInstance();

    protected long lastSent;
    protected User user;
    protected Server server;
    private long lastAwayMessageSent = 0;

    //--- Constructor(s) ---

    public PrivateChannel(User user)
    {
  super(user.getServer(), user.toString(), "", 1);

  this.user = user;
  this.server = user.getServer();
    }

    //--- Method(s) ---

    public boolean canChangeTopic()
    {
  return false;
    }

    public void changeTopic(String newTopic)
    {
    }

    public void close()
    {
  MessageHandler.unsubscribe(GlobalMessage.TYPE, this);
  MessageHandler.removePrivateChannel(this);
    }

    public void exceptionThrown(Exception e)
    {
  errorReceived(e.getMessage());
    }

    public User getUser()
    {
  return user;
    }

    public IUser[] getUsers()
    {
  return new IUser[] { user };
    }

    public void join()
    {
  MessageHandler.subscribe(GlobalMessage.TYPE, this);
  infoReceived("Talking to " + user.toString());
    }

    public void messageReceived(String message)
    {
  messageReceived(user, message);

  if (prefs.getSendChatAwayMessage()
      && (System.currentTimeMillis() - lastAwayMessageSent
    > AWAY_MESSAGE_INTERVAL)) {
      PrivateMessage msg = new PrivateMessage
    (user.getName(), prefs.getChatAwayMessage());
      MessageHandler.send(server, msg);
      messageReceived(server.getUser(),
          prefs.getChatAwayMessage());
      lastAwayMessageSent = System.currentTimeMillis();
  }
    }

    public void sendMessage(String message) throws IOException
    {
  PrivateMessage msg = new PrivateMessage(user.getName(), message);
  msg.setExceptionListener(this);
  MessageHandler.send(server, msg);
  lastSent = System.currentTimeMillis();

  // self copy
  messageReceived(server.getUser(), message);
    }
   

    public void messageReceived(ServerMessage msg)
    {
  if (msg.getServer() != server) {
      return;
  }

  if (msg instanceof GlobalMessage
      && System.currentTimeMillis() - lastSent < ERROR_WAIT) {     
      StringBuffer sb = new StringBuffer();
      sb.append(server.getHost());
      sb.append(": ");
      sb.append(((GlobalMessage)msg).message);

      errorReceived(sb.toString());
  }
    }

}
TOP

Related Classes of xnap.plugin.nap.util.PrivateChannel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.