// unmarshall RPCs from yfs_client and hand them to yfs_server

#include "../rpc/rpc.h"
#include <arpa/inet.h>
#include "yfs_server.h"

int myid;

int id() { 
  return myid;
}

int
main(int argc, char *argv[])
{
  if(argc != 4){
    fprintf(stderr, "Usage: %s yfs_server-port [extent_server-host:]extent_server-port [lock_server-host:]lock_server-port\n", argv[0]);
    exit(1);
  }

  setvbuf(stdout, NULL, _IONBF, 0);

  srandom(getpid());
  myid = random();

  rpcs server(htons(atoi(argv[1])));

  struct sockaddr_in extent_dst;
  make_sockaddr(argv[2], &extent_dst);
  struct sockaddr_in lock_dst;
  make_sockaddr(argv[3], &lock_dst);

  yfs_server fss(extent_dst, lock_dst, atoi(argv[1])+1);

  server.reg(yfs_protocol::getfile, &fss, &yfs_server::getfile);
  server.reg(yfs_protocol::getdir, &fss, &yfs_server::getdir);
  server.reg(yfs_protocol::lookup, &fss, &yfs_server::lookup);
  server.reg(yfs_protocol::mknod, &fss, &yfs_server::mknod);
  server.reg(yfs_protocol::readdir, &fss, &yfs_server::readdir);
  server.reg(yfs_protocol::setattr, &fss, &yfs_server::setattr);
 // server.reg(yfs_protocol::test_server_connection, &fss, &yfs_server::test_server_connection);
  server.reg(yfs_protocol::read, &fss, &yfs_server::read);
  server.reg(yfs_protocol::write, &fss, &yfs_server::write);
  server.reg(yfs_protocol::mkdir, &fss, &yfs_server::mkdir);
  server.reg(yfs_protocol::unlink, &fss, &yfs_server::unlink);
  
  while(1)
    sleep(1000);
}
