/*
 *  CPS108 Spring 1998
 *  Boggle: BoggleServerImpl.java
 *  Brian Fan & Geoff Berry
 */

package boggle;
import java.io.*;
import java.util.*;
import com.objectspace.voyager.*;

/**
 *  BoggleServerImpl - server that handles connecting
 *    BoggleViews to BoggleGames
 */

public class BoggleServerImpl implements BoggleServer
{
    public BoggleServerImpl()
    {
	Vector wordlist = new Vector();
	try
	{
	    boolean done = false;
	    FileReader FR = new FileReader(BoggleConsts.DICTIONARY);
	    BufferedReader BR = new BufferedReader(FR);
	    while (!done)
	    {
		String word = BR.readLine();
		if ( word == null )
		    { done = true; }
		else
		    { wordlist.addElement(word); }
	    }
	}
	catch ( FileNotFoundException e )
	    { System.out.println(e); }
	catch ( IOException e )
	    { System.out.println(e); }

System.out.println("Words in Dictionary: " + wordlist.size());

	myDictionary = new String[wordlist.size()];
	wordlist.copyInto(myDictionary);

	System.out.println("Dictionary read");
    }


    public void addBoggleView(BoggleView view)
    {
	if ( myCurrentGame == null || !myCurrentGame.addBoggleView(view) )
	{
	    if ( myCurrentGame == null )
	    {
	        System.out.println("BoggleServer: No Games running");
	    }
	    else
	    {
	        System.out.println("BoggleServer: Failed to add BoggleView");
	    }
	    BoggleThread game = new BoggleThread(myDictionary);
	    myCurrentGame = game;
	    myCurrentGame.start();
	    myCurrentGame.addBoggleView(view);
	}
    }

    private BoggleThread myCurrentGame = null;
    private String[] myDictionary = new String[1];
}


class BoggleThread extends Thread
{
    public BoggleThread(String[] dictionary)
    {
	myDictionary = dictionary;
    }

    public boolean addBoggleView(BoggleView view)
    {
	if ( myGame == null )
	{
	    System.out.println("BoggleThread: creating the game object");
	    myGame = new BoggleGame(myDictionary);
	}

	if ( myGame.addBoggleView(view) )
	    { System.out.println("    view added"); return true; }
	else
	    { System.out.println("    view not added"); return false; }
    }

    public void run()
    {
        System.out.println("new BoggleThread started");
    }

    private BoggleGame myGame;
    private String[] myDictionary = new String[1];
}

