⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coop-agent.cc

📁 模拟器提供了一个简单易用的平台
💻 CC
字号:
/************************************************** *  File: coop-agent.cc  Author: Suman Banerjee <suman@cs.umd.edu>  Date: July 31, 2001  Terms: GPL  UNI implementation in myns  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. * **************************************************/#include <stdio.h>#include <stdlib.h>#include <assert.h>#include "uninode.h"#include <scheduler.h>#include "app-packet.h"#include "coop-agent.h"#define LOG_COOP_JUNK#define LOG_DATA_PACKETLinkedList<AgentInfo *,int> global_group_members_list;coopAgent::coopAgent (void) : Agent () {  // sgt.ca = this;}coopAgent::~coopAgent (void) {}void coopAgent::init (int Id, int Index, Node *N) {  Agent::init(Id,Index,N);  t = AGENT_APPLICATION_COOP;  m_data_seq_no = 0;  return;}void coopAgent::start (void) {  Agent::start();  if (bse.agent_id == -1) {    printf ("[Err] BSE is not known to agent %d\n", id);    exit (-1);  }#ifdef LOG_COOP_JUNK  printf ("[coop %d %d ] At %8.4f start\n", id, n->id, Scheduler::Clock());#endif // LOG_COOP_JUNK  AgentInfo * me = new AgentInfo (id,n->id);  global_group_members_list.Add(me,id);  is_source = false;  //AppPacket *ap = new AppPacket(JOIN);  //send_pkt(ap,bse.agent_id,bse.node_id);  return;}void coopAgent::stop (void) {#ifdef LOG_COOP_JUNK  printf ("[coop %d %d ] At %8.4f stop\n", id, n->id, Scheduler::Clock());#endif // LOG_COOP_JUNK  void * pos = global_group_members_list.Locate(id);  assert (pos != NULL);  AgentInfo * me = global_group_members_list.GetAt(pos);  global_group_members_list.RemoveAt(pos);  delete me;  //remove_member_list();  // // sgt.CancelTimer();  Agent::stop();  return;}void coopAgent::remove_member_list (void) {  for (void * pos = m_member_list.GetHeadPosition();       pos != NULL;      ) {    AgentInfo *this_ag = m_member_list.GetAt(pos);    void * old_pos = pos;    m_member_list.GetNext(pos);    m_member_list.RemoveAt(old_pos);    delete this_ag;  }  return;}void coopAgent::specific_send_data_pkt (void) {  assert (started == true);#ifdef LOG_DATA_PACKET  printf ("[coop %d %d ] At %8.4f source data-pkt : seq %d\n", id, n->id, Scheduler::Clock(), m_data_seq_no);#endif // LOG_DATA_PACKET  for (void * pos = global_group_members_list.GetHeadPosition();       pos != NULL;       global_group_members_list.GetNext(pos) ) {    AgentInfo *this_ag = global_group_members_list.GetAt(pos);    AppPacket *ap = new AppPacket(PACKET_DATA);    ap->u.data_p.seq_no = m_data_seq_no;    send_pkt(ap,this_ag->agent_id,this_ag->node_id);  }  m_data_seq_no ++;  return;}void coopAgent::specific_rx_pkt_handler  (Packet *p) {  if (p->t != PACKET_APP) {     printf ("[Err] COOP %d received unknown packet type\n", id);     return;  }  AppPacket *ap = (AppPacket *)p;  switch (ap->st) {  case PACKET_DATA:    handle_data_packet(ap);    break;  case SOURCE_UPDATE :  //  handle_source_update(ap);  //  break;  default :    printf ("[Err] COOP %d received unknown packet subtype\n", id);  }  return;}void coopAgent::handle_source_update (AppPacket *ap) {  assert (ap->st == SOURCE_UPDATE);  if (is_source == false)    return;  remove_member_list();  for (int i = 0; i < ap->u.sourceupdate_p.count; i++) {    AgentInfo * this_ag = new AgentInfo(ap->u.sourceupdate_p.arr[i].agent_id,ap->u.sourceupdate_p.arr[i].node_id);    m_member_list.Add(this_ag, ap->u.sourceupdate_p.arr[i].agent_id);  }  return;}void coopAgent::handle_data_packet (AppPacket *ap) {  assert (ap->st == PACKET_DATA);#ifdef LOG_DATA_PACKET  printf ("[coop %d %d ] At %8.4f recv data-pkt : < [ %d %d ] > seq %d\n", id, n->id, Scheduler::Clock(), ap->src_agent, ap->src, ap->u.data_p.seq_no);#endif // LOG_DATA_PACKET  return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -