/**
 * Copyright (c) 2001/2003 Distributed Systems Research Group.
 * All rights reserved.
 *
 * For more information on Distributed Systems Research Group (DSRG),
 * please see <http://www.ics.agh.edu.pl/>.
 *
 * @author radzisz
 * file name: BoardServer.java
 *
 */
package edu.agh.sr.madej;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;

/**
 * Klasa reprezentujaca serwer.
 */
public class NoteBoardServer {

	/**
	 * Statyczna metoda umozliwiajaca uruchomienie serwera.
	 *
	 * @param args tablica parametrow
	 */
	public static void main(String[] args) {
		if (args.length == 1) {
			new NoteBoardServer(Integer.parseInt(args[0]));
			return;
		}
		usage();
	}

	/**
	 * Konstruktor.
	 *
	 * @param port nr portu na ktorym ma zostac uruchomiony rejestr
	 */
	NoteBoardServer(int port) {
		log("starting the server");
		try {
			//create object instance
			NoteBoardImpl noteBoard = new NoteBoardImpl();
			log("NoteBoard object created");

			//export object
			UnicastRemoteObject.exportObject(noteBoard);
			log("NoteBoard object exported");

			String url = "madej";

			//create local registry on the port specified
			//bind in this registry

			Registry reg = LocateRegistry.createRegistry(port);
			reg.rebind(url, noteBoard);
			
			log("Object successfully bind to: " + url);
			log("Server successfully started at: " + new Date());

		} catch (RemoteException e) {
			log("Could not externalize noteboard - cannot continue");
			log(e.toString());
		}

	}

	/**
	 * Metoda logujaca
	 *
	 * @param msg tekst do zalogowania
	 */
	public static void log(String msg) {
		System.out.println(msg);
	}

	/**
	 * Wypisuje sposob uzycia programu
	 */
	private static void usage() {
		System.out.println("Usage: program <rmiDport>");
	}
}