void UserInputServer::ansDisplayNumberCoords(BlockingGate *backGate) { unsigned char dispNumber = backGate->readUInt8(); Rect rect; m_userInput->getDisplayNumberCoords(&rect, dispNumber); sendRect(&rect, backGate); }
void UserInputServer::ansWindowCoords(BlockingGate *backGate) { Rect rect; HWND hwnd = (HWND)backGate->readUInt64(); try { m_userInput->getWindowCoords(hwnd, &rect); sendRect(&rect, backGate); } catch (BrokenHandleException &e) { backGate->writeUInt8(1); backGate->writeUTF8(e.getMessage()); } }
void DesktopServerProto::sendRegion(const Region *region, BlockingGate *gate) { std::vector<Rect> rects; std::vector<Rect>::iterator iRect; region->getRectVector(&rects); unsigned int numRects = (unsigned int)rects.size(); _ASSERT(numRects == rects.size()); gate->writeUInt32(numRects); for (iRect = rects.begin(); iRect < rects.end(); iRect++) { Rect *rect = &(*iRect); sendRect(rect, gate); } }
void ServerVideoManager::setSharedArea(RECT r,bool sendAreaMsg,int client) { first=true; // Next set of rectangles detected from Analyzer threads will be ignored shared=r; r=scaleRect(r,scale_fact); if(sendAreaMsg) { // True when Server is sharing a window, the window has been moved // but its size has not been changed (no need for a message VIDEO_AREA) char *msg=new char[HEADER_VIDEO_AREA_DIM]; // Write the control header int num; num = htons((u_short)HEADER_VIDEO_AREA); memcpy(msg,&num,2); // message code num = htons((u_short)(r.right - r.left)); memcpy(msg+2,&num,2); // width num = htons((u_short)(r.bottom - r.top)); memcpy(msg+4,&num,2); // height send_wrapper(msg,HEADER_VIDEO_AREA_DIM,client); delete[] msg; } if(enabled) { int offset_x=r.left; int offset_y=r.top; r.bottom-=offset_y; r.top-=offset_y; r.left-=offset_x; r.right-=offset_x; sendRect(r,offset_x,offset_y,client); notifyFinishedRefresh(); } }
void ServerVideoManager::refreshBlocks() { // Send the changed rectangle to the sockets if(!first) { RECT shared_scaled=scaleRect(shared,scale_fact); for(int i=0; i<NUM_BLOCKS; i++) { if( rv[i].top !=-1 && rv[i].left !=-1 && rv[i].bottom!=-1 && rv[i].right !=-1 ) { sendRect(rv[i],shared_scaled.left,shared_scaled.top); } } }else{ first=false; } if(old_bmp != NULL) delete[] old_bmp; old_bmp = new_bmp; // New requests to Anlyzer threads completed = 0; current_block = 0; new_bmp = getScreenshot(); int thr=0; for(int i=0; i<NUM_BLOCKS; i++) { newRequest(thr++); if(thr>=THREAD_NUM) thr=0; } }
void UserInputServer::ansNormalizeRect(BlockingGate *backGate) { Rect rect = readRect(backGate); m_userInput->getNormalizedRect(&rect); sendRect(&rect, backGate); }
void UserInputServer::ansDesktopCoords(BlockingGate *backGate) { Rect rect; m_userInput->getPrimaryDisplayCoords(&rect); sendRect(&rect, backGate); }