Update of /cvsroot/wpdev/wolfpack
In directory sc8-pr-cvs1:/tmp/cvs-serv25857
Modified Files:
console.cpp console_win.cpp network.cpp network.h res.rc
resource.h wolfpack.cpp wolfpack.h
Log Message:
Final Changes to the GUI.
Index: console.cpp
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/console.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** console.cpp 8 Oct 2003 01:37:59 -0000 1.8
--- console.cpp 13 Oct 2003 00:11:47 -0000 1.9
***************
*** 215,219 ****
break;
case 'R':
! queueReload( RELOAD_SCRIPTS );
break;
case '?':
--- 215,219 ----
break;
case 'R':
! queueAction( RELOAD_SCRIPTS );
break;
case '?':
Index: console_win.cpp
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/console_win.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** console_win.cpp 10 Oct 2003 21:13:44 -0000 1.16
--- console_win.cpp 13 Oct 2003 00:11:47 -0000 1.17
***************
*** 44,47 ****
--- 44,50 ----
#include "resource.h"
#include "globals.h"
+ #include "network.h"
+ #include "player.h"
+ #include "wolfpack.h"
/*
***************
*** 59,62 ****
--- 62,66 ----
HMENU hmMainMenu;
HBITMAP hLogo = 0;
+ HWND lblUptime = 0, bmpLogo;
HBRUSH hbSeparator = 0, hbBackground = 0;
HWND logWindow = 0; // Log Window
***************
*** 67,70 ****
--- 71,75 ----
unsigned int inputHeight = 0; // For measuring the height of the input field
unsigned int logLimit = 0; // How many characters fit into the log window
+ unsigned int uptimeTimer = 0;
bool canClose = false;
***************
*** 105,125 ****
RECT rect;
! GetClientRect( window, &rect );
- paintRect( dc, 0, 0, rect.right, 87, hbBackground );
paintRect( dc, 0, 87, rect.right, 1, hbSeparator );
- // Draw our Logo
- HDC tempdc = CreateCompatibleDC( dc );
- HGDIOBJ oldobj = SelectObject( tempdc, hLogo );
-
- BITMAP bm;
- GetObject( hLogo, sizeof(bm), &bm );
-
- BitBlt( dc, 0, 0, bm.bmWidth, bm.bmHeight, tempdc, 0, 0, SRCCOPY );
-
- SelectObject( tempdc, oldobj );
- DeleteDC( tempdc );
-
EndPaint( window, &paintInfo );
}
--- 110,117 ----
RECT rect;
! GetClientRect( window, &rect );
paintRect( dc, 0, 87, rect.right, 1, hbSeparator );
EndPaint( window, &paintInfo );
}
***************
*** 129,160 ****
bool result = true;
! switch( id )
{
! case IDC_EXIT:
! keeprun = 0;
! if( canClose )
! DestroyWindow( mainWindow );
! break;
! case ID_RELOAD_ACCOUNTS:
! Console::instance()->send( "RELOADING ACCOUNTS\n" );
! break;
! case ID_RELOAD_PYTHON:
! Console::instance()->send( "RELOADING PYTHON\n" );
! break;
! case ID_RELOAD_SCRIPTS:
! Console::instance()->send( "RELOADING SCRIPTS\n" );
! break;
! case ID_RELOAD_CONFIGURATION:
! Console::instance()->send( "RELOADING CONFIGURATION\n" );
! break;
! default:
! result = false;
}
--- 121,186 ----
bool result = true;
! if( serverState != RUNNING )
{
! result = false;
! }
! else
! {
! cUOSocket *mSock;
! unsigned int i;
! switch( id )
! {
! case IDC_EXIT:
! keeprun = 0;
! if( canClose )
! DestroyWindow( mainWindow );
! break;
! case ID_RELOAD_ACCOUNTS:
! queueAction( RELOAD_ACCOUNTS );
! break;
! case ID_RELOAD_PYTHON:
! queueAction( RELOAD_PYTHON );
! break;
! case ID_RELOAD_SCRIPTS:
! queueAction( RELOAD_SCRIPTS );
! break;
! case ID_RELOAD_CONFIGURATION:
! queueAction( RELOAD_CONFIGURATION );
! break;
!
! case ID_SERVER_SAVEWORLD:
! queueAction( SAVE_WORLD );
! break;
!
! case ID_SERVER_LISTUSERS:
! // We simply do our thread safety manually here
! cNetwork::instance()->lock();
!
! // Generate a list of Users
! mSock = cNetwork::instance()->first();
! i = 0;
!
! for( mSock = cNetwork::instance()->first(); mSock; mSock = cNetwork::instance()->next() )
! {
! if( mSock->player() )
! Console::instance()->send( QString("%1) %2 [%3]\n").arg(++i).arg(mSock->player()->name()).arg(QString::number( mSock->player()->serial(), 16) ) );
! }
!
! cNetwork::instance()->unlock();
!
! Console::instance()->send( QString( "Total Users Online: %1\n" ).arg( i ) );
!
! break;
!
! default:
! result = false;
! }
}
***************
*** 164,176 ****
LRESULT CALLBACK wpWindowProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam )
{
- if( mainWindow && hwnd != mainWindow )
- return DefWindowProc( hwnd, msg, wparam, lparam );
-
CHARFORMAT cf;
LOGFONT lfont;
NMHDR *notify = (NMHDR*)lparam;
switch( msg )
{
case WM_COMMAND:
if( handleMenuSelect( wparam ) )
--- 190,214 ----
LRESULT CALLBACK wpWindowProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam )
{
CHARFORMAT cf;
LOGFONT lfont;
NMHDR *notify = (NMHDR*)lparam;
+ HDC dc;
switch( msg )
{
+ case WM_CTLCOLORSTATIC:
+ if( (HWND)lparam == lblUptime )
+ {
+ dc = (HDC)wparam;
+
+ SelectObject( dc, GetStockObject(ANSI_VAR_FONT) );
+ SetTextColor( dc, RGB( 0xAF, 0xAF, 0xAF ) );
+
+ SetBkMode( dc, TRANSPARENT );
+ SelectObject( dc, GetStockObject( SYSTEM_FONT ) );
+ return (LRESULT)hbBackground;
+ }
+ return DefWindowProc( hwnd, msg, wparam, lparam );
+
case WM_COMMAND:
if( handleMenuSelect( wparam ) )
***************
*** 180,185 ****
case WM_CREATE:
hLogo = LoadBitmap( appInstance, MAKEINTRESOURCE( IDB_LOGO ) );
- hbSeparator = CreateSolidBrush( RGB( 0xAF, 0xAF, 0xAF ) );
- hbBackground = CreateSolidBrush( RGB( 0, 64, 38 ) );
// Create Richedit Box
--- 218,221 ----
***************
*** 224,229 ****
inputWindow = CreateWindow( "EDIT", 0, ES_LEFT|ES_AUTOHSCROLL|WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP, 0, 0, 10, 10, hwnd, (HMENU)CONTROL_INPUT, appInstance, 0 );
return 0;
!
// Autosize our Window Elements
case WM_SIZE:
--- 260,273 ----
inputWindow = CreateWindow( "EDIT", 0, ES_LEFT|ES_AUTOHSCROLL|WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP, 0, 0, 10, 10, hwnd, (HMENU)CONTROL_INPUT, appInstance, 0 );
+ bmpLogo = CreateWindow( "STATIC", 0, SS_BITMAP|WS_CHILD|WS_VISIBLE, 0, 0, 586, 87, hwnd, 0, appInstance, 0 );
+ SendMessage( bmpLogo, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hLogo );
+
+ lblUptime = CreateWindow( "STATIC", 0, WS_CHILD|WS_VISIBLE, 400, 15, 250, 25, hwnd, 0, appInstance, 0 );
+
+ // Set up our timer to refresh the nice Uptime Counter
+ uptimeTimer = SetTimer( NULL, 0, 500, 0 );
+
return 0;
!
// Autosize our Window Elements
case WM_SIZE:
***************
*** 255,261 ****
case WM_PAINT:
drawWindow( hwnd );
!
! case WM_ERASEBKGND:
! return 1;
case WM_NOTIFY:
--- 299,303 ----
case WM_PAINT:
drawWindow( hwnd );
! return DefWindowProc( hwnd, msg, wparam, lparam );
case WM_NOTIFY:
***************
*** 305,308 ****
--- 347,351 ----
case WM_DESTROY:
+ KillTimer( NULL, uptimeTimer );
DestroyMenu( hmMainMenu );
DeleteObject( hLogo );
***************
*** 409,412 ****
--- 452,458 ----
}
+ hbSeparator = CreateSolidBrush( RGB( 0xAF, 0xAF, 0xAF ) );
+ hbBackground = CreateSolidBrush( RGB( 0, 64, 38 ) );
+
// Create the WindowClass
WNDCLASS wpClass;
***************
*** 414,419 ****
wpClass.hInstance = hInstance;
wpClass.lpfnWndProc = wpWindowProc;
wpClass.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_ICON1 ) );
! wpClass.hbrBackground = GetSysColorBrush( COLOR_BTNFACE );
wpClass.lpszClassName = WOLFPACK_CLASS;
wpClass.style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
--- 460,466 ----
wpClass.hInstance = hInstance;
wpClass.lpfnWndProc = wpWindowProc;
+ wpClass.hCursor = LoadCursor( NULL, MAKEINTRESOURCE( IDC_ARROW ) );
wpClass.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_ICON1 ) );
! wpClass.hbrBackground = hbBackground;
wpClass.lpszClassName = WOLFPACK_CLASS;
wpClass.style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
***************
*** 458,461 ****
--- 505,514 ----
continue;
+ }
+ else if( msg.message == WM_TIMER )
+ {
+ char message[512];
+ sprintf( message, "Uptime: %02u:%02u:%02u", ( uiCurrentTime / 1000 / 3600 ), ( uiCurrentTime / 1000 / 60 ) % 60, ( uiCurrentTime / 1000 ) % 3600 );
+ SetWindowText( lblUptime, message );
}
Index: network.cpp
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/network.cpp,v
retrieving revision 1.139
retrieving revision 1.140
diff -C2 -d -r1.139 -r1.140
*** network.cpp 14 Sep 2003 16:09:01 -0000 1.139
--- network.cpp 13 Oct 2003 00:11:47 -0000 1.140
***************
*** 46,60 ****
// Library Includes
! #include "qstringlist.h"
!
! #undef DBGFILE
! #define DBGFILE "Network.cpp"
!
! // Authenticate return codes
!
! #define LOGIN_NOT_FOUND -3
! #define BAD_PASSWORD -4
! #define ACCOUNT_BANNED -5
! #define ACCOUNT_WIPE -6
cNetwork *cNetwork::instance_;
--- 46,50 ----
// Library Includes
! #include <qstringlist.h>
cNetwork *cNetwork::instance_;
***************
*** 108,111 ****
--- 98,103 ----
void cNetwork::poll( void )
{
+ lock();
+
// Check for new Connections (LoginServer)
if( loginServer_ && loginServer_->haveNewConnection() )
***************
*** 133,177 ****
// fast return
! if( uoSockets.isEmpty() && loginSockets.isEmpty() )
! return;
!
! // Check for new Packets
! cUOSocket* uoSocket = 0;
! for ( uoSocket = uoSockets.first(); uoSocket; uoSocket = uoSockets.next() )
{
! // Check for disconnected sockets
! if ( uoSocket->socket()->error() != QSocketDevice::NoError || !uoSocket->socket()->isValid() || !uoSocket->socket()->isWritable() || uoSocket->socket()->isInactive() || !uoSocket->socket()->isOpen() )
! {
! uoSocket->log( "Client disconnected.\n" );
! uoSocket->disconnect();
! netIo_->unregisterSocket( uoSocket->socket() );
! uoSockets.remove( uoSocket );
! }
! else
{
! uoSocket->recieve();
! if( uiCurrentTime % 500 == 0 ) // Once every 0.5 Seconds
! uoSocket->poll();
}
- }
! for ( uoSocket = loginSockets.first(); uoSocket; uoSocket = loginSockets.next())
! {
! if( uoSocket->socket()->error() != QSocketDevice::NoError || !uoSocket->socket()->isValid() || !uoSocket->socket()->isOpen() )
{
! uoSocket->log( "Client disconnected.\n" );
! netIo_->unregisterSocket( uoSocket->socket() );
! loginSockets.remove();
! continue;
! }
! else
! uoSocket->recieve();
! if ( uoSocket->state() == cUOSocket::InGame )
! {
! uoSockets.append( loginSockets.take() );
}
}
}
--- 125,171 ----
// fast return
! if( !uoSockets.isEmpty() || !loginSockets.isEmpty() )
{
! // Check for new Packets
! cUOSocket* uoSocket = 0;
! for ( uoSocket = uoSockets.first(); uoSocket; uoSocket = uoSockets.next() )
{
! // Check for disconnected sockets
! if ( uoSocket->socket()->error() != QSocketDevice::NoError || !uoSocket->socket()->isValid() || !uoSocket->socket()->isWritable() || uoSocket->socket()->isInactive() || !uoSocket->socket()->isOpen() )
! {
! uoSocket->log( "Client disconnected.\n" );
! uoSocket->disconnect();
! netIo_->unregisterSocket( uoSocket->socket() );
! uoSockets.remove( uoSocket );
! }
! else
! {
! uoSocket->recieve();
! if( uiCurrentTime % 500 == 0 ) // Once every 0.5 Seconds
! uoSocket->poll();
! }
}
! for ( uoSocket = loginSockets.first(); uoSocket; uoSocket = loginSockets.next())
{
! if( uoSocket->socket()->error() != QSocketDevice::NoError || !uoSocket->socket()->isValid() || !uoSocket->socket()->isOpen() )
! {
! uoSocket->log( "Client disconnected.\n" );
! netIo_->unregisterSocket( uoSocket->socket() );
! loginSockets.remove();
! continue;
! }
! else
! uoSocket->recieve();
! if ( uoSocket->state() == cUOSocket::InGame )
! {
! uoSockets.append( loginSockets.take() );
! }
}
}
+
+ unlock();
}
***************
*** 196,199 ****
--- 190,195 ----
void cNetwork::broadcast( const QString &message, UINT16 color, UINT16 font )
{
+ lock();
+
cUOSocket *mSock = uoSockets.first();
while( mSock )
***************
*** 202,204 ****
--- 198,202 ----
mSock = uoSockets.next();
}
+
+ unlock();
}
Index: network.h
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/network.h,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** network.h 3 Sep 2003 20:58:17 -0000 1.27
--- network.h 13 Oct 2003 00:11:47 -0000 1.28
***************
*** 38,41 ****
--- 38,42 ----
// System Includes
+ #include <qmutex.h>
//Forward class Declaration
***************
*** 75,78 ****
--- 76,80 ----
cListener *loginServer_;
cListener *gameServer_;
+ QMutex mutex;
public:
***************
*** 90,93 ****
--- 92,97 ----
void poll( void ); // called by the main loop
+ void lock() { mutex.lock(); }
+ void unlock() { mutex.unlock(); }
cAsyncNetIO *netIo() { return netIo_; }
cUOSocket *first() { return uoSockets.first(); }
Index: res.rc
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/res.rc,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** res.rc 8 Oct 2003 01:37:59 -0000 1.18
--- res.rc 13 Oct 2003 00:11:47 -0000 1.19
***************
*** 14,17 ****
--- 14,22 ----
/////////////////////////////////////////////////////////////////////////////
+ // Deutsch (Deutschland) resources
+
+ #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
+
+ /////////////////////////////////////////////////////////////////////////////
//
// Icon
***************
*** 47,50 ****
--- 52,60 ----
MENUITEM "&Scripts", ID_RELOAD_SCRIPTS
END
+ POPUP "&Server"
+ BEGIN
+ MENUITEM "&Save World", ID_SERVER_SAVEWORLD
+ MENUITEM "&List Users", ID_SERVER_LISTUSERS
+ END
END
***************
*** 120,123 ****
--- 130,138 ----
#endif // APSTUDIO_INVOKED
+
+ #endif // Deutsch (Deutschland) resources
+ /////////////////////////////////////////////////////////////////////////////
+
+
#ifndef APSTUDIO_INVOKED
Index: resource.h
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/resource.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** resource.h 8 Oct 2003 01:37:59 -0000 1.10
--- resource.h 13 Oct 2003 00:11:47 -0000 1.11
***************
*** 11,14 ****
--- 11,16 ----
#define ID_RELOAD_PYTHON 40004
#define ID_RELOAD_SCRIPTS 40005
+ #define ID_SERVER_SAVEWORLD 40006
+ #define ID_SERVER_LISTUSERS 40007
// Next default values for new objects
***************
*** 17,21 ****
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 105
! #define _APS_NEXT_COMMAND_VALUE 40006
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
--- 19,23 ----
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 105
! #define _APS_NEXT_COMMAND_VALUE 40009
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
Index: wolfpack.cpp
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/wolfpack.cpp,v
retrieving revision 1.474
retrieving revision 1.475
diff -C2 -d -r1.474 -r1.475
*** wolfpack.cpp 8 Oct 2003 01:37:59 -0000 1.474
--- wolfpack.cpp 13 Oct 2003 00:11:47 -0000 1.475
***************
*** 249,259 ****
}
! QMutex reloadMutex;
! QValueVector< eReloadType > reloadQueue;
! void queueReload( eReloadType type )
{
! QMutexLocker lock( &reloadMutex );
! reloadQueue.push_back( type );
}
--- 249,260 ----
}
! QMutex actionMutex;
! QValueVector< eActionType > actionQueue;
! void queueAction( eActionType type )
{
! actionMutex.lock();
! actionQueue.push_back( type );
! actionMutex.unlock();
}
***************
*** 524,534 ****
uiCurrentTime = getNormalizedTime();
! // It is save to process any pending reloads now
! reloadMutex.lock();
! while( reloadQueue.count() > 0 )
{
! eReloadType type = reloadQueue[0];
! reloadQueue.erase( reloadQueue.begin() );
switch( type )
--- 525,535 ----
uiCurrentTime = getNormalizedTime();
! // Perform Threadsafe Actions
! actionMutex.lock();
! while( actionQueue.begin() != actionQueue.end() )
{
! eActionType type = *(actionQueue.begin());
! actionQueue.erase( actionQueue.begin() );
switch( type )
***************
*** 552,559 ****
ScriptManager::instance()->reload();
break;
}
}
! reloadMutex.unlock();
Console::instance()->poll();
--- 553,564 ----
ScriptManager::instance()->reload();
break;
+
+ case SAVE_WORLD:
+ World::instance()->save();
+ break;
}
}
! actionMutex.unlock();
Console::instance()->poll();
Index: wolfpack.h
===================================================================
RCS file: /cvsroot/wpdev/wolfpack/wolfpack.h,v
retrieving revision 1.37
retrieving revision 1.38
diff -C2 -d -r1.37 -r1.38
*** wolfpack.h 8 Oct 2003 01:37:59 -0000 1.37
--- wolfpack.h 13 Oct 2003 00:11:47 -0000 1.38
***************
*** 33,45 ****
#define __WOLFPACK_H__
! enum eReloadType
{
RELOAD_SCRIPTS = 0,
RELOAD_PYTHON,
RELOAD_ACCOUNTS,
! RELOAD_CONFIGURATION
};
! void queueReload( eReloadType );
#endif
--- 33,46 ----
#define __WOLFPACK_H__
! enum eActionType
{
RELOAD_SCRIPTS = 0,
RELOAD_PYTHON,
RELOAD_ACCOUNTS,
! RELOAD_CONFIGURATION,
! SAVE_WORLD
};
! void queueAction( eActionType );
#endif
|