Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

MousePipe Class Reference

A server for sending mouseMessage to VCC. More...

#include <MousePipe.h>

Inherits PServer.

List of all members.

Public Methods

bool queueMessage (const int, const int, const int)
virtual void disconnect ()
virtual bool serve ()
 MousePipe (const TString &name)
virtual ~MousePipe ()

Private Types

typedef MousePipe::mouseMessage mouseMessage
 The message sent over a mouse pipe. More...


Private Attributes

TString semName
 The semaphore name.

HANDLE numberInQueue
 Handle to the actual semaphore.


Detailed Description

This class implements a queue on the pipe. The queue is stored 'on' the pipe and is orchestrated using a semaphore.

Definition at line 20 of file MousePipe.h.


Member Typedef Documentation

typedef struct MousePipe::mouseMessage MousePipe::mouseMessage [private]
 

The message sent to VCC consits of x, y co-ordinates and the button state.


Constructor & Destructor Documentation

MousePipe::MousePipe const TString   name
 

Parameters:
name  : A TString used to generate unique names for the various kernel objects

Definition at line 34 of file MousePipe.cpp.

References BUFFER_SIZE, numberInQueue, and semName.

00035 :PServer(TString( TEXT("Mouse") ) + name, true, BUFFER_SIZE)
00036 {
00037     semName = TString( TEXT("MOUSESEM") ) + name;
00038     numberInQueue = NULL;
00039 }

MousePipe::~MousePipe   [virtual]
 

Object Destructor

Definition at line 44 of file MousePipe.cpp.

References numberInQueue.

00045 {
00046     if(numberInQueue != NULL)
00047         CloseHandle(numberInQueue);
00048 }


Member Function Documentation

void MousePipe::disconnect   [virtual]
 

Calls PServer::disconnect() and removes the semaphore. See documentation for PServer.

Reimplemented from PServer.

Definition at line 110 of file MousePipe.cpp.

References PServer::disconnect(), and numberInQueue.

Referenced by serve().

00111 {   
00112     PServer::disconnect();
00113 
00114     if(numberInQueue != NULL)
00115         CloseHandle(numberInQueue);
00116 }

bool MousePipe::queueMessage const int    x,
const int    y,
const int    buttonState
 

Queues a mouseMessage to the pipe

Parameters:
x  : The x co-ordinate
y  : The y co-ordinate
buttonState  : 0 = button down, 1 = button up
Returns:
bool : true iff message was queued to the pipe

Definition at line 61 of file MousePipe.cpp.

References MousePipe::mouseMessage::button, Pipe::hPipe, PServer::isConnected(), numberInQueue, MousePipe::mouseMessage::x, and MousePipe::mouseMessage::y.

Referenced by registerMouse().

00062 {
00063     if( !isConnected() ){
00064         return false;
00065     }
00066 
00067     mouseMessage msg;
00068     msg.x = x;
00069     msg.y = y;
00070     msg.button = buttonState;
00071 
00072     DWORD bytesWritten;
00073     if( ReleaseSemaphore(numberInQueue, 1, NULL) ){ 
00074         // WriteFile will return very quickly since there is space in the buffer
00075         return WriteFile(hPipe, &msg, sizeof(mouseMessage), &bytesWritten, NULL)
00076             ? bytesWritten == sizeof(mouseMessage) : false;
00077     } else { // no space in buffer
00078         return false;
00079     }
00080 }

bool MousePipe::serve   [virtual]
 

Calls PServer::serve() and if successful creates a semaphore. See documentation for PServer.

Reimplemented from PServer.

Definition at line 86 of file MousePipe.cpp.

References disconnect(), numberInQueue, QUEUE_LENGTH, semName, and PServer::serve().

Referenced by Connect().

00087 {
00088     if( !PServer::serve() ) {
00089         return false;
00090     } else {
00091         numberInQueue = CreateSemaphore(
00092             NULL,           // default security
00093             0,             // initial count ie 0 messages in pipe
00094             QUEUE_LENGTH,   // maximum count
00095             semName);
00096 
00097         if(numberInQueue == NULL){
00098             disconnect();
00099             return false;
00100         }
00101 
00102         return true;
00103     }   
00104 }


The documentation for this class was generated from the following files:
Generated on Mon Mar 25 06:30:00 2002 for Window Dressing by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001