// this is the lock server
// the lock client has a similar interface

#ifndef lock_server_h
#define lock_server_h

#include <string>
#include "lock_protocol.h"
#include "lock_client.h"
#include "rpc.h"
#include <string>

using namespace std;

typedef struct lock_info {
  std::string name;
  int nonce;	
  int pid;
};

class lock_server {

 protected:
  int nacquire;

 public:
  lock_server();
  virtual ~lock_server() {};
  virtual lock_protocol::status stat(std::string, int &);
  virtual lock_protocol::status acquire(std::string, int, int, int &);
  virtual lock_protocol::status release(std::string, int, int, int &);

 private:	

	list<lock_info > * acquire_list;
	list<lock_info > * release_list;
	pthread_mutex_t locks_mutex;
	list<std::string> * locks_list;

};




#endif 







