package net.trolans.IRC;

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

public class IRCServer
{
	String serverName;
	long serverPort;
	Socket serverSocket;
	BufferedReader from_server;
	BufferedWriter to_server;
	IRC ircWindow;
	Vector channels;
	
	IRCServer(IRC irc, String host, long port)
	{
		this.ircWindow = irc;
		this.serverName = host;
		this.serverPort = port;
	}
	
	public boolean connect(IRCUser me)
	{
		try
		{
			serverSocket = new Socket(serverName, (int)serverPort);
			
			if(serverSocket != null)
			{
   				if(ircWindow.useIdent == true)
	   			{
            		Ident ident = new Ident(me.getIdent());
               		ident.start();
            	}
				from_server = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
				to_server   = new BufferedWriter(new OutputStreamWriter(serverSocket.getOutputStream()));
				sendData("NICK " + me.getNick());
				sendData("USER " + me.getIdent() + " . " + serverName + " :" + me.getRealName());

				return true;
			}
		}
		catch(Exception e) { ircWindow.displayOutput("Exception: " + e); };
		return false;
	}
	public void disconnect()
	{
		try
		{
			if(serverSocket != null)
			{
				from_server.close();
				to_server.close();
				serverSocket.close();
			}
			serverSocket = null;
		}
		catch (Exception e) { System.out.println("Exception: " + e); };
	}
	public boolean isConnected()
	{
		return (serverSocket != null);
	}
	public String readLine()
	{
		try
		{
			return from_server.readLine();
		}
		catch (Exception e) { System.out.println("Exception: " + e); };
		return null;
	}
	public void sendData(String data)
	{
		if(isConnected())
		{
			try
			{
				to_server.write(data + "\r\n");
				to_server.flush();
			}
			catch (Exception e) { System.out.println("Exception: " + e); }
		}
		else
		{
			ircWindow.displayOutput("You need to connect to a server first!");
		}
	}
	public void setServer(String server)
	{
		this.serverName = server;
	}
}

