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

📄 dce_sinfo.c

📁 Ho Chi Minh City University of Technology Computer Science Department Distributed Computing E
💻 C
字号:
/***************************************Ho Chi Minh City University of Technology    Computer Science Department Distributed Computing Environment (DCE)Written by Nguyen Van Noi -59406114File dce_sinfo.c on Mon Dec 21 14:44:53 1998****************************************/#include <values.h>#include "dce_agent.h"PSINFONewSinfo (int order, u_long addr){  PSINFO p = (PSINFO) malloc (sizeof (SINFO));  if (!p)    return NULL;  p->order = order;  p->addr = addr;  p->load = 0;  p->status = 1;  p->time = 2 * TIMEOUT_IAMALIVE + 1;  return p;}voidDecTime (void *pt){  PSINFO p = (PSINFO) pt;  if (p->time >= 0)    p->time -= TIMEOUT_IAMALIVE;  else    p->status = 0;}voiddce_agent_dcetime (){  TravelList (Agent.pListServer, DecTime);}int _MaxOrder;voidMaXOrder (void *pt){  PSINFO p = (PSINFO) pt;  if (_MaxOrder < p->order)    _MaxOrder = p->order;}intdce_agent_find_maxorder (){  _MaxOrder = 0;  TravelList (Agent.pListServer, MaXOrder);  return _MaxOrder;}double _load;PSINFO _ps;voidMinLoad (void *pt){  PSINFO p = (PSINFO) pt;  if ((_load <= p->load) || (p->status == 0))    return;  _load = p->load;  _ps = p;}u_longdce_agent_findminload (){  _load = MAXDOUBLE;  _ps = NULL;  TravelList (Agent.pListServer, MinLoad);  if (_ps)    return _ps->addr;  return -1;}intcmpsinfo (void *p1, void *p2){  PSINFO p = (PSINFO) p1;  u_long *pu = (u_long *) p2;  if (*pu == p->addr)    {      p->load = msg.load;      p->status = 1;      p->time = 2 * TIMEOUT_IAMALIVE + 1;      return 1;    }  return 0;}voiddce_agent_update_newmsg (){  PSINFO p;  void **pr = ItemLookup (Agent.pListServer, (void *) &msg.saddr, cmpsinfo);  if (pr)    {      free (pr);      return;    }  p = NewSinfo (msg.order, msg.saddr);  if (!p)    return;  p->load = msg.load;  InsertList (Agent.pListServer, (void *) p);}int _n;voidwritesinfosock (void *p){  write (_n, (void *) &Agent.Msg, sizeof (MSG));  write (_n, p, sizeof (SINFO));}voiddce_agent_writesinfosock (int n){  _n = n;  TravelList (Agent.pListServer, writesinfosock);}intcmppp (void *p1, void *p2){  PSINFO p = (PSINFO) p1;  u_long *pu = (u_long *) p2;  if (*pu == p->addr)    return 1;  return 0;}intdce_agent_findserverinlist (u_long u){  void **pr = ItemLookup (Agent.pListServer, (void *) &u, cmppp);  if (!pr)    return 0;  free (pr);  return 1;}voiddce_agent_delete_server (u_long u){  DeleteItem (Agent.pListServer, (void *) &u, cmppp, NULL);}voidcmppalive (void *pt){  PSINFO p = (PSINFO) pt;  if (p->status == 1)    _MaxOrder++;}intdce_agent_findhowserveralive (){  _MaxOrder = 0;  TravelList (Agent.pListServer, cmppalive);  return _MaxOrder;}voidwriteuserinfo (void *p){  long *pl = (long *) p;  Agent.Msg.lextra = *pl;  write (_n, (void *) &Agent.Msg, sizeof (MSG));}voiddce_agent_writeuserlist (int n){  _n = n;  TravelList (Agent.pUserList, writeuserinfo);}voiduserbroadcast (void *p){  long *pl = (long *) p;  Agent.Msg.lextra = *pl;  dce_agent_mcastsend ((char *) &Agent.Msg, sizeof (MSG));}voiddce_agent_userbroadcast (){  TravelList (Agent.pUserList, userbroadcast);}voidwriteservice (void *pt){  PSERVICEINFO p = (PSERVICEINFO) pt;  Agent.Msg.pid = p->num;  Agent.Msg.nextra = p->param;  strcpy (Agent.Msg.sername, p->sername);  write (_n, (void *) &Agent.Msg, sizeof (MSG));}voiddce_agent_writeservicelist (int n){  _n = n;  TravelList (Agent.pService, writeservice);}voidservicebroadcast (void *pt){  PSERVICEINFO p = (PSERVICEINFO) pt;  Agent.Msg.nextra = p->param;  strcpy (Agent.Msg.sername, p->sername);  dce_agent_mcastsend ((char *) &Agent.Msg, sizeof (MSG));}voiddce_agent_servicebroadcast (){  TravelList (Agent.pService, servicebroadcast);}voidwriteuserservice (void *p){  write (_n, (void *) &Agent.Msg, sizeof (MSG));  write (_n, p, sizeof (USERSERVICE));}voiddce_agent_writecuruserservice (int n){  _n = n;  TravelList (Agent.pCurUserService, writeuserservice);}voiduserservicebroadcast (void *pt){  PUSERSERVICE p = (PUSERSERVICE) pt;  msg.type = DCE_MSG_ALL_REPLY_ALL_USERSERVICE;  msg.who = UNKNOWN;  msg.pid = p->pid;  msg.saddr = p->serveraddr;  msg.uid = p->uid;  msg.nextra = p->sernum;  msg.aaddr = p->clientaddr;  msg.lextra = p->tStart;  msg.lextra1 = p->tEnd;  msg.sport = p->time;  dce_agent_mcastsend ((char *) &msg, sizeof (MSG));}voiddce_agent_userservicebroadcast (){  TravelList (Agent.pCurUserService, userservicebroadcast);}

⌨️ 快捷键说明

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