#include "adhoc_client.h"

adhoc_client::adhoc_client()
  : network_client()
{

}

int
adhoc_client::basic_send(node_id dest, char *msg, int len) {
  //find next hop for dest
  //randomly pick one?

  return 0;
}

void
adhoc_client::message_handler(node_id sender, network_protocol::message_header *h, 
                              char *msg, int len) {
  if (DEBUG)
    printf("DEBUG: (adhoc message handler) Received from %u: %s\n",sender, msg);
  
  switch(h->type) {
  case network_protocol::broadcast:
    if ((h->args > 0) && (h->source != client_id)){
      if (DEBUG)
        printf("rebroadcasting ...\n");
      char buf[len+sizeof(network_protocol::message_header)];
      network_protocol::message_header hr = *h;
      hr.args = h->args-1;
      network_client::attach_header(&hr, msg, len, buf);
      network_client::basic_broadcast(buf, len+sizeof(network_protocol::message_header));
    }

    //add to table
    break;
  case network_protocol::join:
    network_protocol::message_header hr;
    hr.source = client_id;
    hr.dest = h->source;
    hr.id = get_msg_id();
    hr.type = network_protocol::join_ack;
    hr.args = h->id;
    basic_send(h->source, (char *)&hr, sizeof(network_protocol::message_header));
    break;
  case network_protocol::join_ack:
    
    break;
  }
  network_client::message_handler(sender, h, msg, len);
}
