package com.esri.geoevent.solutions.transport.irc.jerklib;
/**
* A class for writing Session level events.
* By that I mean not Channel level stuff , though
* some methods can be passed a Channel or channel name as a target.
*
* @author mohadib
*
*/
class RequestGenerator
{
private Session session;
/**
* Sets the sessionnection to use
*
* @param session
*/
void setSession(Session session)
{
this.session = session;
}
/**
* Send Who request
*
* @param who
*/
public void who(String who)
{
write(new WriteRequest("WHO " + who, session));
}
/**
* Send a whois query
*
* @param nick - target of whois
*/
public void whois(String nick)
{
write(new WriteRequest("WHOIS " + nick, session));
}
/**
* Send WhoWas query
* @param nick
*/
public void whoWas(String nick)
{
write(new WriteRequest("WHOWAS " + nick, session));
}
/**
* Invite a user to a channel
*
* @param nick
* @param chan
*/
public void invite(String nick, Channel chan)
{
write(new WriteRequest("INVITE " + nick + " " + chan.getName(), session));
}
/**
* Get a List of Channels from server.
*/
public void chanList()
{
write(new WriteRequest("LIST", session));
}
/**
* Get information on a secific channel
*
* @param channel
*/
public void chanList(String channel)
{
write(new WriteRequest("LIST " + channel, session));
}
/**
* Join a Channel
*
* @param channel
*/
public void join(String channel)
{
write(new WriteRequest("JOIN " + channel, session));
}
/**
* Join a password protected Channel
*
* @param channel
* @param pass
*/
public void join(String channel, String pass)
{
write(new WriteRequest("JOIN " + channel + " " + pass, session));
}
/**
* Send a ctcp request
* @param target
* @param request
*/
public void ctcp(String target, String request)
{
write(new WriteRequest("\001" + request.toUpperCase() + "\001", session, target));
}
/**
* Send a notice
*
* @param target
* @param msg
*/
public void notice(String target, String msg)
{
write(new WriteRequest("NOTICE " + target + " :" + msg, session));
}
/**
* Set self away
*
* @param message
*/
public void setAway(String message)
{
write(new WriteRequest("AWAY :" + message, session));
}
/**
* Unset away
*
*/
public void unSetAway()
{
write(new WriteRequest("AWAY", session));
}
/**
* Send server version query
*/
public void getServerVersion()
{
write(new WriteRequest("VERSION " + session.getConnection().getHostName(), session));
}
/**
* Send server version query for specific hostmask pattern
*
* @param hostPattern
*/
public void getServerVersion(String hostPattern)
{
write(new WriteRequest("VERSION " + hostPattern, session));
}
/**
* Send nick change request
*
* @param nick
*/
public void changeNick(String nick)
{
write(new WriteRequest("NICK " + nick, session));
}
/**
* Set a mode
*
* @param target
* @param mode
*/
public void mode(String target , String mode)
{
write(new WriteRequest("MODE " + target + " " + mode, session));
}
/**
* Send ctcp action
*
* @param target
* @param actionText
*/
public void action(String target, String actionText)
{
ctcp(target, actionText);
}
/**
* Speak in a channel
* @param msg
* @param channel
* @see Channel#say(String)
*/
public void sayChannel(String msg, Channel channel)
{
write(new WriteRequest(msg, channel, session));
}
/**
* Send a private message
*
* @param nick
* @param msg
*/
public void sayPrivate(String nick, String msg)
{
write(new WriteRequest(msg, session, nick));
}
/**
* Send raw text to server
*
* @param data
*/
public void sayRaw(String data)
{
write(new WriteRequest(data, session));
}
private void write(WriteRequest req)
{
Connection con = session.getConnection();
if(con != null)
{
con.addWriteRequest(req);
}
}
}