void CSHPeerDialog::UpdatePeerInfo(const list<NewSHPeerInfo>* peerList,int dispItemID) { if(dispItemID != m_dispId) return; CString strText; int index = 0; list<NewSHPeerInfo>::const_iterator it; for (it = peerList->begin(); it != peerList->end(); it++,index++) { int subItem = 1; if(m_peerMager->GetItemCount() <= index) { strText.Format(_T("%d"),m_peerMager->GetItemCount()+1); m_peerMager->InsertItem(m_peerMager->GetItemCount(),strText); } // if(it->iscdn) { strText.Format(_T("%s"),_T("-:-:-")); //PeerID m_peerMager->SetItemText(index,subItem++,strText); //Key subItem++; //NAT类型 m_peerMager->SetItemText(index,subItem++,strText); } else { //PeerID strText.Format(_T("%d"),it->peerId); m_peerMager->SetItemText(index,subItem++,strText); //Key strText.Format(_T("%d"),it->index_key); m_peerMager->SetItemText(index,subItem++,strText); //NAT类型 strText.Format(_T("%s"),NatTypeDesc((SHNatType)it->nat).c_str()); m_peerMager->SetItemText(index,subItem++,strText); } //可用IP m_peerMager->SetItemText(index,subItem++,GetIpStr(it->ip).c_str()); //端口 strText.Format(_T("%d"),ntohs(it->port)); m_peerMager->SetItemText(index,subItem++,strText); //打洞耗时 strText.Format(_T("%dms"),it->punch_time); m_peerMager->SetItemText(index,subItem++,strText); CString strState; //状态 if (it->status == SHPeerStatus_Fetching_Address) { strState = _T("取外网地址中"); } else if (it->status == SHPeerStatus_Requsting) { strState = _T("正在请求文件"); } else if(it->status == SHPeerStatus_Punching) { strState = _T("正在打洞"); } else if(it->status == SHPeerStatus_PunchSucceed) { strState = _T("打洞成功"); } else if(it->status == SHPeerStatus_PunchFailed) { strState = _T("打洞失败"); } else if(it->status == SHPeerStatus_Connecting) { strState = _T("正在连接"); } else if(it->status == SHPeerStatus_ConnectSucceed) { strState = _T("连接成功"); } else if(it->status == SHPeerStatus_ConnectFailed) { strState = _T("连接失败"); } else if(it->status == SHPeerStatus_Closed) { strState = _T("已关闭"); } else if(it->status == SHPeerStatus_Pause) { strState = _T("暂停"); } else if (it->status == SHPeerStatus_Unused) { strState = _T("未使用"); } if(!m_isDownCompleted) { if(it->status == SHPeerStatus_ConnectSucceed) { //速度 strText.Format(_T("%s/s"),GetSizeDesc(it->speed*1024).c_str()); m_peerMager->SetItemText(index,subItem++,strText); //平均速度 strText.Format(_T("%s/s"),GetSizeDesc(it->average_speed*1024).c_str()); m_peerMager->SetItemText(index,subItem++,strText); } else { //速度 strText.Format(_T("%s/s"),GetSizeDesc(0).c_str()); m_peerMager->SetItemText(index,subItem++,strText); //平均速度 strText.Format(_T("%s/s"),GetSizeDesc(0).c_str()); m_peerMager->SetItemText(index,subItem++,strText); } } else { if(it->status == SHPeerStatus_ConnectSucceed) { strText.Format(_T("%s"),_T("-:-:-")); m_peerMager->SetItemText(index,subItem++,strText); //平均速度 strText.Format(_T("%s/s"),GetSizeDesc(it->average_speed*1024).c_str()); m_peerMager->SetItemText(index,subItem++,strText); } else { strText.Format(_T("%s"),_T("-:-:-")); m_peerMager->SetItemText(index,subItem++,strText); //平均速度 strText.Format(_T("%s"),_T("-:-:-")); m_peerMager->SetItemText(index,subItem++,strText); } } //窗口大小 strText.Format(_T("%d"),it->win_size); m_peerMager->SetItemText(index,subItem++,strText); //平均RTTS strText.Format(_T("%d"),it->avg_rtt); m_peerMager->SetItemText(index,subItem++,strText); //lost率 strText.Format(_T("%.2f%%"),it->lost_rate); m_peerMager->SetItemText(index,subItem++,strText); //平均send strText.Format(_T("%d"),it->avg_send_count); m_peerMager->SetItemText(index,subItem++,strText); //平均receive strText.Format(_T("%d"),it->avg_receive_count); m_peerMager->SetItemText(index,subItem++,strText); //平均timeout strText.Format(_T("%d"),it->avg_timeout_count); m_peerMager->SetItemText(index,subItem++,strText); //状态 m_peerMager->SetItemText(index,subItem++,strState); } }
void CSHDispDialog::DispInfo(const NewSHDispInfo& info) { //计算可用Peer数量 m_usablePeer = 0; m_allUsablePeer = 0; peer_list.clear(); for(int i=0;i<info.peer_list_len;i++) { if(!info.peer_list[i].iscdn) { m_allUsablePeer++; if(info.peer_list[i].status == SHPeerStatus_ConnectSucceed)//连接成功 { m_usablePeer++; } } peer_list.push_back(info.peer_list[i]); } CString strText; if(info.oper == 0) //开始下载 { int item = GetItemIndex(info.ID); if(item == -1) { DisStart(info); } } else if(info.oper == 1) //更新显示速度 { int item = GetItemIndex(info.ID); if(item == -1) { DisStart(info); } map<int, list<NewSHPeerInfo> >::iterator iter; m_peerInfoHandle[(int)info.ID] = peer_list; int subitem=5; strText.Format(_T("%d"),info.byterate); m_peerMager->SetItemText(item,subitem++,strText); switch(info.state_code) { case 1: m_peerMager->SetItemText(item,subitem++,_T("P2P")); break; case 2: m_peerMager->SetItemText(item,subitem++,_T("HTTP")); break; case 3: m_peerMager->SetItemText(item,subitem++,_T("HTTP|P2P")); break; case 4: m_peerMager->SetItemText(item,subitem++,_T("START")); break; case 5: m_peerMager->SetItemText(item,subitem++,_T("START|P2P")); break; case 6: m_peerMager->SetItemText(item,subitem++,_T("START|HTTP")); break; default: break; } strText.Format(_T("%s/s"),GetSizeDesc(info.speed*1024).c_str()); m_peerMager->SetItemText(item,subitem++,strText); // strText.Format(_T("%s/s"),GetSizeDesc(info.average_speed*1024).c_str()); m_peerMager->SetItemText(item,subitem++,strText); // strText.Format(_T("%.2f%%"),info.percent); m_peerMager->SetItemText(item,subitem++,strText); // strText.Format(_T("%d"),info.cdn_num); m_peerMager->SetItemText(item,subitem++,strText); strText.Format(_T("%d"),info.max_conn); m_peerMager->SetItemText(item,subitem++,strText); // strText.Format(_T("%d/%d"),m_usablePeer,m_allUsablePeer); m_peerMager->SetItemText(item,subitem++,strText); if(m_peerDlg != NULL && m_peerDlg->IsVisable()) { m_peerDlg->SetDownState(false); m_peerDlg->UpdatePeerInfo(&peer_list,(int)info.ID); } } else //下载完毕或出错 { int item = GetItemIndex(info.ID); if(item == -1) { DisStart(info); } int subitem=7; //完成也要刷新下速度 map<int, list<NewSHPeerInfo> >::iterator iter; m_peerInfoHandle[(int)info.ID] = peer_list; //ATLTRACE(_T("Stop item = %d,param = %d\r\n"),item,info.ID); m_peerMager->SetItemText(item,subitem++,_T("-:-:-")); // strText.Format(_T("%s/s"),GetSizeDesc(info.average_speed*1024).c_str()); m_peerMager->SetItemText(item,subitem++,strText); if(info.state == 0) { m_peerMager->SetItemText(item,subitem++,_T("100%")); } else if(info.state == 1) { strText.Format(_T("%.2f%%"),info.percent); m_peerMager->SetItemText(item,subitem++,strText); } else { strText.Format(_T("%.2f%%"),info.percent); m_peerMager->SetItemText(item,subitem++,strText); } strText.Format(_T("%d"),info.cdn_num); m_peerMager->SetItemText(item,subitem++,strText); subitem++; strText.Format(_T("%d/%d"),m_usablePeer,m_allUsablePeer); m_peerMager->SetItemText(item,subitem++,strText); subitem += 1; time_t ti(info.end_time); tm temptm = *localtime(&ti); SYSTEMTIME st = {1900 + temptm.tm_year, 1 + temptm.tm_mon, temptm.tm_wday, temptm.tm_mday, temptm.tm_hour, temptm.tm_min, temptm.tm_sec, 0}; strText.Format(_T("%02d-%02d %02d:%02d:%02d"),st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); m_peerMager->SetItemText(item,subitem++,strText); if(info.state == 0) { m_peerMager->SetItemText(item,subitem++,_T("下载完成")); } else if(info.state == 1) { m_peerMager->SetItemText(item,subitem++,_T("结束会话")); } else { strText.Format(_T("下载出错 errorCode %d"),info.state); m_peerMager->SetItemText(item,subitem++,strText); } //耗时 strText.Format(_T("%.2f"),(float)info.timespace/1000); m_peerMager->SetItemText(item,subitem++,strText); //上报数据 strText.Format(_T("%d/%s"),info.report_len,GetSizeDesc(info.report_len).c_str()); m_peerMager->SetItemText(item,subitem++,strText); // strText.Format(_T("%.2f%%"),info.p2p_percent); m_peerMager->SetItemText(item,subitem++,strText); // if(m_peerDlg != NULL && m_peerDlg->IsVisable() ) { m_peerDlg->SetDownState(true); m_peerDlg->UpdatePeerInfo(&peer_list,(int)info.ID); } } }
void CSHDispDialog::DisStart(const NewSHDispInfo& info) { CString strText; if(m_peerMager->GetItemCount()>=100) { Clear(); } strText.Format(_T("%d"),m_peerMager->GetItemCount()+1); int item = m_peerMager->InsertItem(m_peerMager->GetItemCount(),strText); m_peerMager->SetSelectedItem(item); int subItem = 1; CString filename(info.file_name); m_peerMager->SetItemText(item,subItem++,filename); // strText.Format(_T("%d"),info.num); m_peerMager->SetItemText(item,subItem++,strText); m_peerMager->SetItemText(item,subItem++,GetSizeDesc(info.size).c_str()); strText.Format(_T("%ds"),info.duration); m_peerMager->SetItemText(item,subItem++,strText); subItem += 5; // strText.Format(_T("%d"),info.cdn_num); m_peerMager->SetItemText(item,subItem++,strText); subItem++; strText.Format(_T("%d/%d"),m_usablePeer,m_allUsablePeer); m_peerMager->SetItemText(item,subItem++,strText); time_t ti(info.start_time); tm temptm = *localtime(&ti); SYSTEMTIME st = {1900 + temptm.tm_year, 1 + temptm.tm_mon, temptm.tm_wday, temptm.tm_mday, temptm.tm_hour, temptm.tm_min, temptm.tm_sec, 0}; strText.Format(_T("%02d-%02d %02d:%02d:%02d"),st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); m_peerMager->SetItemText(item,subItem++,strText); strText.Format(_T("-:-:-")); m_peerMager->SetItemText(item,subItem++,strText); m_peerMager->SetItemText(item,subItem++,_T("正在下载")); m_peerMager->SetItemData(item,info.ID); subItem += 3; if(info.type == 0) { m_peerMager->SetItemText(item,subItem++,_T("完整")); } else if(info.type == 1) { m_peerMager->SetItemText(item,subItem++,_T("拖拽")); } strText.Format(_T("%d"),info.play_start); m_peerMager->SetItemText(item,subItem++,strText); m_peerInfoHandle.insert(std::make_pair(info.ID,peer_list)); if(IsVisable()) { m_peerMager->EnsureVisible(m_peerMager->GetItemCount()-1,FALSE); } if(m_peerDlg != NULL && m_peerDlg->IsVisable() ) { CString peerDlgText = _T(""); peerDlgText.Format(_T("文件:%s 段号:%d"),info.file_name,info.num); m_peerDlg->SetCaptionName(peerDlgText.GetBuffer()); m_peerDlg->Clear(); m_peerDlg->SetDownState(false); m_peerDlg->SetDispItemID((int)info.ID); m_peerDlg->UpdatePeerInfo(&peer_list,(int)info.ID); } }
void PrintImageInfo(const char* file_name) { printf("IM Info\n"); printf(" File Name:\n %s\n", file_name); int error; imFile* ifile = imFileOpen(file_name, &error); if (!ifile) { PrintError(error); return; } double file_size = FileSize(file_name); printf(" File Size: %.2f %s\n", file_size, GetSizeDesc(&file_size)); char format[10]; char compression[20]; int image_count; imFileGetInfo(ifile, format, compression, &image_count); char format_desc[50]; imFormatInfo(format, format_desc, NULL, NULL); printf(" Format: %s - %s\n", format, format_desc); printf(" Compression: %s\n", compression); printf(" Image Count: %d\n", image_count); for (int i = 0; i < image_count; i++) { int width, height, color_mode, data_type; error = imFileReadImageInfo(ifile, i, &width, &height, &color_mode, &data_type); if (error != IM_ERR_NONE) { PrintError(error); imFileClose(ifile); return; } printf(" Image #%d\n", i); printf(" Width: %d\n", width); printf(" Height: %d\n", height); printf(" Color Space: %s\n", imColorModeSpaceName(color_mode)); printf(" Has Alpha: %s\n", imColorModeHasAlpha(color_mode)? "Yes": "No"); printf(" Is Packed: %s\n", imColorModeIsPacked(color_mode)? "Yes": "No"); printf(" Is Top Down: %s\n", imColorModeIsTopDown(color_mode)? "Yes": "No"); printf(" Data Type: %s\n", imDataTypeName(data_type)); double image_size = imImageDataSize(width, height, color_mode, data_type); printf(" Data Size: %.2f %s\n", image_size, GetSizeDesc(&image_size)); char* attrib_list[50]; // should be dynamic allocated int attrib_list_count; imFileGetAttributeList(ifile, attrib_list, &attrib_list_count); for (int a = 0; a < attrib_list_count; a++) { if (a == 0) printf(" Attributes:\n"); int attrib_data_type, attrib_count; const void* attrib_data = imFileGetAttribute(ifile, attrib_list[a], &attrib_data_type, &attrib_count); if (attrib_count == 1) printf(" %s: %s\n", attrib_list[a], AttribData2Str(attrib_data, attrib_data_type)); else if (attrib_data_type == IM_BYTE && FindZero((imbyte*)attrib_data, attrib_count)) printf(" %s: %s\n", attrib_list[a], attrib_data); else printf(" %s: %s %s ...\n", attrib_list[a], AttribData2Str(attrib_data, attrib_data_type), AttribData2Str((imbyte*)attrib_data + imDataTypeSize(attrib_data_type), attrib_data_type)); } } imFileClose(ifile); }