예제 #1
0
void UserInputServer::ansDisplayNumberCoords(BlockingGate *backGate)
{
  unsigned char dispNumber = backGate->readUInt8();
  Rect rect;
  m_userInput->getDisplayNumberCoords(&rect, dispNumber);
  sendRect(&rect, backGate);
}
예제 #2
0
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());
  }
}
예제 #3
0
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;
	}	
}
예제 #6
0
void UserInputServer::ansNormalizeRect(BlockingGate *backGate)
{
  Rect rect = readRect(backGate);
  m_userInput->getNormalizedRect(&rect);
  sendRect(&rect, backGate);
}
예제 #7
0
void UserInputServer::ansDesktopCoords(BlockingGate *backGate)
{
  Rect rect;
  m_userInput->getPrimaryDisplayCoords(&rect);
  sendRect(&rect, backGate);
}