📄 barmanager.cpp
字号:
tile = new TwoDRect(0 + x*gridsize,0 ,0 + z*gridsize, gridsize, gridsize); tile->setColor4v(Color[WHITE]); tile->loadMaterials(moonMaterials); AddObject(tile); tile->draw(); } srand(time(NULL)); return 1;}int BarManager::AddObject(CObject *obj){ //never hurts to double check; if (obj == NULL) { printf("ERROR! dont pass AddObjet NULL!\n"); //getchar(); return -1; } else { ObjectList.push_back(obj); glNewList(static_world_list_base + static_world_list_cnt , GL_COMPILE_AND_EXECUTE); obj->draw(); glEndList(); return 0; }}/* this whole thing needs an overhault so that one function hasall the data and can be more intelligent the map class will handlethe positioning to users can set it up more intelligently*/void BarManager :: SetupBarBase(int node, struct CObject_struct &b){ CRand r(1,4); int xpos; int zpos; b.type = BAR; xpos = 0; zpos = 0; for (int i =1; i < node; i++) { xpos++; if (xpos >= xsquares /2) { zpos++; xpos = 0; } } b.posX = xpos * 2 * gridsize; //b.posX = 0; //getchar(); b.posY=0; b.posZ = zpos * gridsize * 2; //b.posZ = (xsquares % node)*gridsize*2;// b.obj_materials = greenMaterials;// b.color_r = 0;// b.color_g = 1;// b.color_b = 0;// b.color_a = 0.4;}int BarManager :: UpdateOrCreateBar(int node, int realnodeid, struct CBar_struct d){ struct bar_record r; struct CObject_struct base; for (BarIter = BarList.begin(); BarIter != BarList.end(); BarIter++) { if ( BarIter->mosix_number == node) { // printf("found node. BarIter->MosixNumer is %d node is %d real node-id %d\n",BarIter->mosix_number, node, realnodeid); BarIter->bar->setData(d); return 1; } } r.mosix_number = node; SetupBarBase(node, base); r.bar = new CBar(base, d); AddBar(r); }int BarManager :: AddBar(struct bar_record bar){ if (bar.bar == NULL) { printf("Error. AddBar passed a null bar\n"); return -1; } BarList.push_back(bar); // printf("added bar : %d\n", bar.mosix_number); NumBars++; return 0;}int BarManager :: Show(){ ShowObjects(); ShowBars(); BuildFont(); nodeinfo(); KillFont(); return 0;}int BarManager::ShowObjects(){ glPushMatrix(); int i; for(ObjectIter = ObjectList.begin(); ObjectIter != ObjectList.end(); ObjectIter++) (*ObjectIter)->draw(); glPopMatrix(); glFlush(); return 0;}int BarManager :: ShowBars(){ glPushMatrix(); for (BarIter = BarList.begin(); BarIter != BarList.end(); BarIter++) { BarIter->bar->draw(); } glPopMatrix(); return 0;}void BarManager :: dealloc(){ for(ObjectIter = ObjectList.begin(); ObjectIter != ObjectList.end(); ObjectIter++) { // printf("dealloc'd n object in manager::dealloc\n"); (*ObjectIter)->dealloc(); } ObjectList.clear(); for (BarIter = BarList.begin(); BarIter != BarList.end(); BarIter++) { // printf("deallocating a bar..\n"); BarIter->bar->dealloc(); } BarList.clear();} BarManager :: ~BarManager(){ dealloc();}/* this is where openMosix/Mosix data gets turned into gl data. lots of interesting things to do here for the intrepid hacker color coded loads, etc*/void BarManager:: NodeToBar(struct node_info &node){ //printf("in NodeTobar..displaying %d LOAD is %d\n", DISPLAYMODE, LOAD); struct CBar_struct bar_info; int usedmem=0; int tmem=0; int rmem=0; int load=0; int util=0; int usedmempercent=0; if (DISPLAYMODE == LOAD) { load=node.mosix_info.load / 20 + 2; if (load>0) { bar_info.height = load; // printf("load is %d\n", load); } else { bar_info.height = 0; } } else if (DISPLAYMODE == MEM) { tmem=node.mosix_info.tmem/1048576; rmem=node.mosix_info.rmem/1048576; usedmem=tmem-rmem; if ((usedmem>0) && (tmem>0) && (rmem>0)) { usedmempercent=(usedmem*100)/tmem; // printf("usedmem is %d\n", usedmem); // printf("mempercent is %d\n", usedmempercent); usedmempercent=usedmempercent/10; } else { usedmempercent=0; } bar_info.height = usedmempercent; } else if (DISPLAYMODE == UTIL) { util=node.mosix_info.util/10; if(util>0) { bar_info.height = util; // printf("util is %d\n", util); } else { bar_info.height = 0; } } bar_info.width = gridsize; UpdateOrCreateBar(node.real_node_number,node.mosix_number, bar_info);}/* this makes us disregard a packet of data but thats OK because *//* we will just read it again the next time it gets sent */int BarManager :: ReadNumNodes(){ if ( read(sd, &read_data, size) != size) { perror("error in ReadNumNodes.\n"); perror("read"); exit(-1); } // printf(" cluster contains %d nodes\n", read_data.num_nodes); NumNodes = read_data.num_nodes; fcntl(sd, F_SETFL, O_NONBLOCK); return read_data.num_nodes;}void BarManager :: GetMosixData(int a){ int count = 0; BytesRead = 0; BytesRead = read(sd, &read_data, size); while (BytesRead == size) { NodeToBar(read_data); BytesRead = read(sd, &read_data, size); // printnode(&read_data); } }void BarManager :: quit(){ // printf("BarManager :: quit\n"); // exit calls the destructor above, dont do explicitly. //BarManager :: ~BarManager(); exit(0);}/****************/int BarManager :: ConnectToServer(char *addr, char *prt){ struct hostent *he; struct sockaddr_in sockaddr; char string[1024]; int port; port = atoi(prt); printf("connecting to server %s %d\n", addr, port); sd = socket(AF_INET, SOCK_STREAM, 0); if (sd < 0) { perror("scoket failed: \n"); exit(-1); } he = (struct hostent *) gethostbyname(addr); if (!he) { printf("couldnt resolve %s", addr); return -1; } sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(port); sockaddr.sin_addr = *(( struct in_addr *)he->h_addr); memset(&(sockaddr.sin_zero), '\0', 8); if ( connect(sd, (struct sockaddr *) &sockaddr, sizeof(struct sockaddr)) == -1) { perror("connect\n"); return -1; }return 0; } void BarManager :: printnode(struct node_info *info){ printf("openMosix/Mosix number:%5d\n", info->mosix_number); printf("real number:%5d\n", info->real_node_number); printf("Total nodes :%5d\n", info->num_nodes); printf("load :%5d\n", info->mosix_info.load); printf("cpus :%5d\n", info->mosix_info.ncpus); printf("util :%5d\n", info->mosix_info.util); printf("status :%5d\n", info->mosix_info.status); printf("mem :%5d\n", info->mosix_info.mem); printf("rmem :%5d\n", info->mosix_info.rmem); printf("tmem :%5d\n", info->mosix_info.tmem);#ifdef CONFIG_MOSIX_RESEARCH printf("rio :%5d\n", info->mosix_info.util); printf("wio :%5d\n", info->mosix_info.util);#endif printf("\n"); }/****************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -