"Fossies" - the Fresh Open Source Software archive 
Member "tvnserver-2.0.4/fb-update-sender/UpdateSender.h" of archive tvnserver-2.0.4-src.zip:
// Copyright (C) 2008, 2009, 2010 GlavSoft LLC.
// All rights reserved.
//
//-------------------------------------------------------------------------
// This file is part of the TightVNC software. Please visit our Web site:
//
// http://www.tightvnc.com/
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//-------------------------------------------------------------------------
//
#ifndef __UPDATESENDER_H__
#define __UPDATESENDER_H__
#include "thread/AutoLock.h"
#include "thread/Thread.h"
#include "desktop/UpdateKeeper.h"
#include "UpdateRequestListener.h"
#include "rfb/FrameBuffer.h"
#include "desktop/WindowsMouseGrabber.h"
#include "ViewPort.h"
#include "FrameBufferAccessor.h"
#include "network/RfbOutputGate.h"
#include "network/RfbInputGate.h"
#include "rfb/Encoder.h"
#include "rfb/HextileEncoder.h"
#include "rfb/JpegEncoder.h"
#include "rfb/EncoderStore.h"
#include "rfb-sconn/RfbCodeRegistrator.h"
#include "util/DateTime.h"
class UpdateSender : public Thread, public RfbDispatcherListener
{
public:
UpdateSender(RfbCodeRegistrator *codeRegtor,
UpdateRequestListener *updReqListener, RfbOutputGate *output,
int id);
virtual ~UpdateSender(void);
void init(const Dimension *fbDim, const PixelFormat *pf);
void newUpdates(const UpdateContainer *updateContainer,
const FrameBuffer *frameBuffer,
const CursorShape *cursorShape,
const Rect *viewPort);
void blockCursorPosSending();
bool isCursorPosBlocked();
Rect getViewPort();
bool clientIsReady();
protected:
virtual void onRequest(UINT32 reqCode, RfbInputGate *input);
void readUpdateRequest(RfbInputGate *io);
void readSetPixelFormat(RfbInputGate *io);
void readSetEncodings(RfbInputGate *io);
void addUpdateContainer(const UpdateContainer *updateContainer,
const FrameBuffer *srcFb,
const Rect *viewPort);
virtual void execute();
virtual void onTerminate();
void checkCursorPos(UpdateContainer *updCont,
const Rect *viewPort);
void sendUpdate();
void sendPalette(PixelFormat *pf);
void setClientPixelFormat(const PixelFormat *pf,
bool clrMapEntries);
void sendRectHeader(const Rect *rect, INT32 encodingType);
void sendRectHeader(UINT16 x, UINT16 y, UINT16 w, UINT16 h,
INT32 encodingType);
void sendNewFBSize(Dimension *dim);
void sendFbInClientDim(const EncodeOptions *encodeOptions,
const FrameBuffer *fb,
const Dimension *dim,
const PixelFormat *pf);
void sendCursorShapeUpdate(const PixelFormat *fmt);
void sendCursorPosUpdate();
void sendCopyRect(const std::vector<Rect> *rects, const Point *source);
void sendRectangles(Encoder *encoder,
const std::vector<Rect> *rects,
const FrameBuffer *frameBuffer,
const EncodeOptions *encodeOptions);
void splitRegion(Encoder *encoder,
const Region *region,
std::vector<Rect> *rects,
const FrameBuffer *frameBuffer,
const EncodeOptions *encodeOptions);
WindowsEvent m_newUpdatesEvent;
UpdateRequestListener *m_updReqListener;
Region m_requestedIncrReg;
Region m_requestedFullReg;
bool m_busy;
LocalMutex m_reqRectLocMut;
Rect m_viewPort;
Dimension m_clientDim;
Dimension m_lastViewPortDim;
LocalMutex m_viewPortMut;
UpdateKeeper *m_updateKeeper;
FrameBufferAccessor m_fbAccessor;
CursorShape m_cursorShape;
LocalMutex m_curShapeLocMut;
Point m_cursorPos;
DateTime m_blockCurPosTime;
LocalMutex m_curPosLocMut;
EncodeOptions m_newEncodeOptions;
LocalMutex m_newEncodeOptionsLocker;
PixelFormat m_newPixelFormat;
LocalMutex m_newPixelFormatLocker;
bool m_setColorMapEntr;
RfbOutputGate *m_output;
PixelConverter m_pixelConverter;
EncoderStore m_enbox;
int m_id;
};
#endif