/***************************************************************************
*   Copyright (C) 2006 by Ian Reinhart Geiser   *
*   geiseri@sourcextreme.com   *
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU Library 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 Library 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.             *
***************************************************************************/
#include "directory.h"
#include "remotemethod.h"
#include "localnode.h"
#include "remotenode.h"
#include "serverinstance.h"

namespace KRPC
{
}

KRPC::Directory::Directory( QObject* parent ) : RPCInvokable( parent )
{

}


KRPC::Directory::~Directory()
{

}

void KRPC::Directory::put( const NodeID & key, const QMap< QString, QVariant > & node )
{
	QHostAddress remoteAddress( node["address"].value<QString>() );
	uint remotePort = node["port"].value<uint>();

	RemoteNode *remoteNode = new RemoteNode( remoteAddress, remotePort );
	ServerInstance::instance()->serverNode()->put(key, remoteNode);

}

QMap< QString, QVariant > KRPC::Directory::get( const NodeID & key ) const
{
	NodeInterface *node = ServerInstance::instance()->serverNode()->get(key);
	QMap<QString,QVariant> result;
	result["address"] = node->address().toString();
	result["port"] = node->port();

	return result;
}

bool KRPC::Directory::hasKey( const NodeID & key ) const
{
	return ServerInstance::instance()->serverNode()->hasKey(key);
}

KRPC::NodeID KRPC::Directory::upperKey( ) const
{
	return ServerInstance::instance()->serverNode()->upperKey();
}

KRPC::NodeID KRPC::Directory::previousKey( ) const
{
	return ServerInstance::instance()->serverNode()->previousKey();
}

KRPC::NodeID KRPC::Directory::nextKey( ) const
{
	return ServerInstance::instance()->serverNode()->nextKey();
}

KRPC::NodeID KRPC::Directory::lowerKey( ) const
{
	return ServerInstance::instance()->serverNode()->lowerKey();
}

KRPC::NodeID KRPC::Directory::key( ) const
{
	return ServerInstance::instance()->serverNode()->key();
}


