2011-01-25 12:41 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbxbp/xbp3state.prg
* contrib/hbxbp/xbpbrowse.prg
* contrib/hbxbp/xbpcheckbox.prg
* contrib/hbxbp/xbpdataref.prg
* contrib/hbxbp/xbplistbox.prg
* contrib/hbxbp/xbpmenubar.prg
* contrib/hbxbp/xbpmle.prg
* contrib/hbxbp/xbpradiobutton.prg
* contrib/hbxbp/xbpscrollbar.prg
* contrib/hbxbp/xbpsle.prg
* contrib/hbxbp/xbpspinbutton.prg
* contrib/hbxbp/xbptoolbar.prg
* contrib/hbxbp/xbptreeview.prg
* contrib/hbxbp/xbpwindow.prg
! Renamed: XbpDataRef() => DataRef() to be exact Xbase++ compatible.
+ XbpMenu():popup()
* contrib/hbnetio/netiosrv.c
+ Added: NETIO_SRVOPENFILES( pConnectionSocket ) -> nFilesOpen
+ contrib/hbnetio/utils/harbour.ico
+ contrib/hbnetio/utils/about.png
+ contrib/hbnetio/utils/exit.png
+ contrib/hbnetio/utils/fullscreen.png
+ contrib/hbnetio/utils/harbour.png
+ contrib/hbnetio/utils/help.png
+ contrib/hbnetio/utils/terminate.png
+ contrib/hbnetio/utils/netiosrvq.qrc
+ contrib/hbnetio/utils/netiosrvq.prg
+ contrib/hbnetio/utils/netiosrvqt.hbp
+ Added: GUI NetIO Server based on hbXBP and hbQT.
implements : DateTime In, DateTime Out, IP connected from,
Port number connected from, number of files open.
implements : Termination of a particular connection
via context menu or toolbar icon.
@@ -16,6 +16,43 @@
|
||||
The license applies to all entries newer than 2009-04-28.
|
||||
*/
|
||||
|
||||
2011-01-25 12:41 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
|
||||
* contrib/hbxbp/xbp3state.prg
|
||||
* contrib/hbxbp/xbpbrowse.prg
|
||||
* contrib/hbxbp/xbpcheckbox.prg
|
||||
* contrib/hbxbp/xbpdataref.prg
|
||||
* contrib/hbxbp/xbplistbox.prg
|
||||
* contrib/hbxbp/xbpmenubar.prg
|
||||
* contrib/hbxbp/xbpmle.prg
|
||||
* contrib/hbxbp/xbpradiobutton.prg
|
||||
* contrib/hbxbp/xbpscrollbar.prg
|
||||
* contrib/hbxbp/xbpsle.prg
|
||||
* contrib/hbxbp/xbpspinbutton.prg
|
||||
* contrib/hbxbp/xbptoolbar.prg
|
||||
* contrib/hbxbp/xbptreeview.prg
|
||||
* contrib/hbxbp/xbpwindow.prg
|
||||
! Renamed: XbpDataRef() => DataRef() to be exact Xbase++ compatible.
|
||||
+ XbpMenu():popup()
|
||||
|
||||
* contrib/hbnetio/netiosrv.c
|
||||
+ Added: NETIO_SRVOPENFILES( pConnectionSocket ) -> nFilesOpen
|
||||
|
||||
+ contrib/hbnetio/utils/harbour.ico
|
||||
+ contrib/hbnetio/utils/about.png
|
||||
+ contrib/hbnetio/utils/exit.png
|
||||
+ contrib/hbnetio/utils/fullscreen.png
|
||||
+ contrib/hbnetio/utils/harbour.png
|
||||
+ contrib/hbnetio/utils/help.png
|
||||
+ contrib/hbnetio/utils/terminate.png
|
||||
+ contrib/hbnetio/utils/netiosrvq.qrc
|
||||
+ contrib/hbnetio/utils/netiosrvq.prg
|
||||
+ contrib/hbnetio/utils/netiosrvqt.hbp
|
||||
+ Added: GUI NetIO Server based on hbXBP and hbQT.
|
||||
implements : DateTime In, DateTime Out, IP connected from,
|
||||
Port number connected from, number of files open.
|
||||
implements : Termination of a particular connection
|
||||
via context menu or toolbar icon.
|
||||
|
||||
2011-01-24 23:12 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/include/hbcomp.h
|
||||
* harbour/src/compiler/cmdcheck.c
|
||||
|
||||
@@ -1387,3 +1387,14 @@ HB_FUNC( NETIO_SRVSOCKET )
|
||||
if( conn )
|
||||
hb_socketItemPut( hb_stackReturnItem(), conn->sd );
|
||||
}
|
||||
|
||||
HB_FUNC( NETIO_SRVOPENFILES )
|
||||
{
|
||||
PHB_CONSRV conn = s_consrvParam( 1 );
|
||||
|
||||
if( conn )
|
||||
hb_retni( conn->filesCount );
|
||||
else
|
||||
hb_retni( 0 )
|
||||
}
|
||||
|
||||
|
||||
BIN
harbour/contrib/hbnetio/utils/about.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
harbour/contrib/hbnetio/utils/exit.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
harbour/contrib/hbnetio/utils/fullscreen.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
harbour/contrib/hbnetio/utils/harbour.ico
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
harbour/contrib/hbnetio/utils/harbour.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
harbour/contrib/hbnetio/utils/help.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
894
harbour/contrib/hbnetio/utils/netiosrvq.prg
Normal file
@@ -0,0 +1,894 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* demonstration/test code for alternative RDD IO API which uses own
|
||||
* very simple TCP/IP file server.
|
||||
*
|
||||
* Copyright 2009 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
|
||||
* www - http://harbour-project.org
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* The following parts are Copyright of the individual authors.
|
||||
* www - http://harbour-project.org
|
||||
*
|
||||
* Copyright 2010 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* Copyright 2011 Pritpal Bedi <bedipritpal@hotmail.com>
|
||||
*
|
||||
* See COPYING for licensing terms.
|
||||
*
|
||||
*/
|
||||
|
||||
/* netio_mtserver() needs MT HVM version */
|
||||
REQUEST HB_MT
|
||||
REQUEST __HB_EXTERN__
|
||||
|
||||
#define _RPC_FILTER "HBNETIOSRV_RPCMAIN"
|
||||
|
||||
#define _NETIOSRV_nPort 1
|
||||
#define _NETIOSRV_cIFAddr 2
|
||||
#define _NETIOSRV_cRootDir 3
|
||||
#define _NETIOSRV_lRPC 4
|
||||
#define _NETIOSRV_cRPCFFileName 5
|
||||
#define _NETIOSRV_hRPCFHRB 6
|
||||
#define _NETIOSRV_lEncryption 7
|
||||
#define _NETIOSRV_pListenSocket 8
|
||||
#define _NETIOSRV_nCompressionLevel 9
|
||||
#define _NETIOSRV_nStrategy 10
|
||||
#define _NETIOSRV_cPassword 11
|
||||
#define _NETIOSRV_MAX_ 11
|
||||
|
||||
#define DAT_HBSOCKET 1
|
||||
#define DAT_SERIAL 2
|
||||
#define DAT_ACTIVATED 3
|
||||
#define DAT_IP 4
|
||||
#define DAT_PORT 5
|
||||
#define DAT_TIMEIN 6
|
||||
#define DAT_TIMEOUT 7
|
||||
#define DAT_BYTESIN 8
|
||||
#define DAT_BYTESOUT 9
|
||||
#define DAT_CONNSOCKET 10
|
||||
#define DAT_OPENFILES 11
|
||||
|
||||
#include "hbhrb.ch"
|
||||
#include "fileio.ch"
|
||||
#include "hbclass.ch"
|
||||
#include "common.ch"
|
||||
#include "hbqtgui.ch"
|
||||
|
||||
#include "Xbp.ch"
|
||||
#include "Gra.ch"
|
||||
#include "Appevent.ch"
|
||||
|
||||
#define RGB( r, g, b ) GraMakeRGBColor( { r, g, b } )
|
||||
|
||||
THREAD STATIC hSocket
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
Function Main( ... )
|
||||
LOCAL netiosrv[ _NETIOSRV_MAX_ ]
|
||||
LOCAL cParam, cExt, cFile
|
||||
|
||||
netiosrv[ _NETIOSRV_nPort ] := 2941
|
||||
netiosrv[ _NETIOSRV_cIFAddr ] := "0.0.0.0"
|
||||
netiosrv[ _NETIOSRV_cRootDir ] := hb_dirBase()
|
||||
netiosrv[ _NETIOSRV_lRPC ] := .F.
|
||||
netiosrv[ _NETIOSRV_lEncryption ] := .F.
|
||||
|
||||
FOR EACH cParam IN { ... }
|
||||
DO CASE
|
||||
CASE Lower( Left( cParam, 6 ) ) == "-port="
|
||||
netiosrv[ _NETIOSRV_nPort ] := Val( SubStr( cParam, 7 ) )
|
||||
CASE Lower( Left( cParam, 7 ) ) == "-iface="
|
||||
netiosrv[ _NETIOSRV_cIFAddr ] := SubStr( cParam, 8 )
|
||||
CASE Lower( Left( cParam, 9 ) ) == "-rootdir="
|
||||
netiosrv[ _NETIOSRV_cRootDir ] := SubStr( cParam, 10 )
|
||||
CASE Lower( Left( cParam, 6 ) ) == "-pass="
|
||||
netiosrv[ _NETIOSRV_cPassword ]:= SubStr( cParam, 7 )
|
||||
hb_StrClear( @cParam )
|
||||
CASE Lower( Left( cParam, 5 ) ) == "-rpc="
|
||||
netiosrv[ _NETIOSRV_cRPCFFileName ] := SubStr( cParam, 6 )
|
||||
hb_FNameSplit( netiosrv[ _NETIOSRV_cRPCFFileName ], NIL, NIL, @cExt )
|
||||
cExt := Lower( cExt )
|
||||
SWITCH cExt
|
||||
CASE ".prg"
|
||||
CASE ".hbs"
|
||||
CASE ".hrb"
|
||||
EXIT
|
||||
OTHERWISE
|
||||
cExt := FileSig( cFile )
|
||||
ENDSWITCH
|
||||
SWITCH cExt
|
||||
CASE ".prg"
|
||||
CASE ".hbs"
|
||||
cFile := HB_COMPILEBUF( HB_ARGV( 0 ), "-n2", "-w", "-es2", "-q0",;
|
||||
"-D" + "__HBSCRIPT__HBNETIOSRV", netiosrv[ _NETIOSRV_cRPCFFileName ] )
|
||||
IF cFile != NIL
|
||||
netiosrv[ _NETIOSRV_hRPCFHRB ] := hb_hrbLoad( HB_HRB_BIND_FORCELOCAL, cFile )
|
||||
ENDIF
|
||||
EXIT
|
||||
OTHERWISE
|
||||
netiosrv[ _NETIOSRV_hRPCFHRB ] := hb_hrbLoad( HB_HRB_BIND_FORCELOCAL, netiosrv[ _NETIOSRV_cRPCFFileName ] )
|
||||
EXIT
|
||||
ENDSWITCH
|
||||
netiosrv[ _NETIOSRV_lRPC ] := ! Empty( netiosrv[ _NETIOSRV_hRPCFHRB ] ) .AND. ! Empty( hb_hrbGetFunSym( netiosrv[ _NETIOSRV_hRPCFHRB ], _RPC_FILTER ) )
|
||||
IF ! netiosrv[ _NETIOSRV_lRPC ]
|
||||
netiosrv[ _NETIOSRV_cRPCFFileName ] := NIL
|
||||
netiosrv[ _NETIOSRV_hRPCFHRB ] := NIL
|
||||
ENDIF
|
||||
CASE Lower( cParam ) == "-rpc"
|
||||
netiosrv[ _NETIOSRV_lRPC ] := .T.
|
||||
CASE Lower( cParam ) == "--version"
|
||||
RETURN NIL
|
||||
CASE Lower( cParam ) == "-help" .OR. ;
|
||||
Lower( cParam ) == "--help"
|
||||
HB_Usage()
|
||||
RETURN NIL
|
||||
OTHERWISE
|
||||
OutStd( "Warning: Unkown parameter ignored: " + cParam + hb_eol() )
|
||||
ENDCASE
|
||||
NEXT
|
||||
|
||||
NetIOServer():new():create( netiosrv )
|
||||
|
||||
RETURN ( NIL )
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS NetIOServer
|
||||
DATA nNumConxn INIT 0
|
||||
DATA oDlg
|
||||
DATA oBrw
|
||||
DATA oBrowser
|
||||
DATA cTitle
|
||||
DATA pMtx
|
||||
DATA oSys
|
||||
DATA lSystemTrayAvailable
|
||||
DATA oSysMenu
|
||||
DATA qTimer
|
||||
DATA qLayout
|
||||
DATA qAct1
|
||||
DATA qAct2
|
||||
DATA nPrevWindowState
|
||||
DATA lChanging INIT .f.
|
||||
DATA lQuit INIT .f.
|
||||
DATA nCurRec INIT 1
|
||||
DATA aData INIT { { NIL, ; // hSock
|
||||
0 , ; // nSerial
|
||||
.F., ; // lActive
|
||||
" ", ; // cIP
|
||||
0 , ; // nPort
|
||||
" ", ; // time-in
|
||||
" ", ; // time-out
|
||||
0 , ; // bytes-in
|
||||
0 , ; // bytes-out
|
||||
NIL, ; // conn socket
|
||||
0 } } // files opened
|
||||
|
||||
METHOD new()
|
||||
METHOD create( netiosrv )
|
||||
METHOD execEvent( cEvent, p )
|
||||
|
||||
METHOD custom_netio_server( pConnectionSocket )
|
||||
METHOD register_connection( pConnectionSocket )
|
||||
METHOD unregister_connection( pConnectionSocket )
|
||||
|
||||
METHOD buildToolBar()
|
||||
METHOD buildSystemTray()
|
||||
METHOD buildBrowser()
|
||||
|
||||
METHOD refresh()
|
||||
METHOD confirmExit()
|
||||
METHOD showDlgBySystemTrayIconCommand()
|
||||
|
||||
METHOD terminate()
|
||||
METHOD buildColumns()
|
||||
|
||||
METHOD skipBlock( nHowMany )
|
||||
METHOD goTop()
|
||||
METHOD goBottom()
|
||||
METHOD lastRec()
|
||||
METHOD recNo()
|
||||
METHOD goto( nRec )
|
||||
|
||||
ENDCLASS
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:new()
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:create( netiosrv )
|
||||
LOCAL nEvent, mp1, mp2, oXbp
|
||||
|
||||
netiosrv[ _NETIOSRV_pListenSocket ] := ;
|
||||
netio_mtserver( netiosrv[ _NETIOSRV_nPort ],;
|
||||
netiosrv[ _NETIOSRV_cIFAddr ],;
|
||||
netiosrv[ _NETIOSRV_cRootDir ],;
|
||||
iif( Empty( netiosrv[ _NETIOSRV_hRPCFHRB ] ), netiosrv[ _NETIOSRV_lRPC ], ;
|
||||
hb_hrbGetFunSym( netiosrv[ _NETIOSRV_hRPCFHRB ], _RPC_FILTER ) ),;
|
||||
netiosrv[ _NETIOSRV_cPassword ], ;
|
||||
netiosrv[ _NETIOSRV_nCompressionLevel ], ;
|
||||
netiosrv[ _NETIOSRV_nStrategy ], ;
|
||||
{|p| ::custom_netio_server( p ) } )
|
||||
|
||||
netiosrv[ _NETIOSRV_lEncryption ] := ! Empty( netiosrv[ _NETIOSRV_cPassword ] )
|
||||
|
||||
IF Empty( netiosrv[ _NETIOSRV_pListenSocket ] )
|
||||
MsgBox( "Cannot start server." )
|
||||
|
||||
ELSE
|
||||
QResource():registerResource_1( hbqtres_netiosrvq(), ":/resource" )
|
||||
|
||||
::pMtx := hb_mutexCreate()
|
||||
::cTitle := "NetIO Server [ " + netiosrv[ _NETIOSRV_cIFAddr ] + " : " + ;
|
||||
ltrim( str( int( netiosrv[ _NETIOSRV_nPort ] ) ) ) + " : " + ;
|
||||
netiosrv[ _NETIOSRV_cRootDir ] + " ]"
|
||||
|
||||
::oDlg := XbpDialog():new( , , { 20,20 }, { 800,300 } )
|
||||
::oDlg:title := ::cTitle
|
||||
::oDlg:taskList := .T.
|
||||
::oDlg:close := {|| ::confirmExit() }
|
||||
::oDlg:create()
|
||||
::oDlg:drawingArea:setFontCompoundName( "10.Ariel" )
|
||||
::oDlg:setWindowIcon( ":/harbour.png" )
|
||||
|
||||
::buildToolBar()
|
||||
|
||||
::qLayout := QGridLayout()
|
||||
::qLayout:setContentsMargins( 0,0,0,0 )
|
||||
::qLayout:setHorizontalSpacing( 0 )
|
||||
::qLayout:setVerticalSpacing( 0 )
|
||||
//
|
||||
::oDlg:drawingArea:setLayout( ::qLayout )
|
||||
|
||||
::buildBrowser()
|
||||
|
||||
::oDlg:oWidget:connect( QEvent_WindowStateChange, {|e| ::execEvent( "QEvent_WindowStateChange", e ) } )
|
||||
::oDlg:oWidget:connect( QEvent_Hide , {|e| ::execEvent( "QEvent_Hide" , e ) } )
|
||||
//
|
||||
::buildSystemTray()
|
||||
|
||||
SetAppWindow( ::oDlg )
|
||||
SetAppFocus( ::oDlg )
|
||||
|
||||
DO WHILE nEvent <> xbeP_Quit
|
||||
nEvent := AppEvent( @mp1, @mp2, @oXbp )
|
||||
oXbp:handleEvent( nEvent, mp1, mp2 )
|
||||
ENDDO
|
||||
|
||||
netio_serverStop( netiosrv[ _NETIOSRV_pListenSocket ] )
|
||||
netiosrv[ _NETIOSRV_pListenSocket ] := NIL
|
||||
|
||||
::oDlg:destroy()
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:custom_netio_server( pConnectionSocket )
|
||||
::register_connection( pConnectionSocket )
|
||||
BEGIN SEQUENCE
|
||||
netio_server( pConnectionSocket )
|
||||
END SEQUENCE
|
||||
::unregister_connection( pConnectionSocket )
|
||||
RETURN NIL
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:register_connection( pConnectionSocket )
|
||||
LOCAL aPeer, cIP := "", nPort := 0
|
||||
|
||||
hSocket := netio_srvSocket( pConnectionSocket )
|
||||
|
||||
aPeer := hb_socketGetPeerName( hSocket )
|
||||
IF hb_isArray( aPeer )
|
||||
IF len( aPeer ) >= 2
|
||||
cIP := xtos( aPeer[ 2 ] )
|
||||
ENDIF
|
||||
IF len( aPeer ) >= 3
|
||||
nPort := val( xtos( aPeer[ 3 ] ) )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF hb_mutexLock( ::pMtx )
|
||||
IF ::aData[ 1,2 ] == 0
|
||||
::aData[ 1 ] := { hSocket, 1, .t., pad( cIP, 15 ), nPort, dtoc( date() ) + " " + time(), space( 18 ), 0, 0, pConnectionSocket, 0 }
|
||||
ELSE
|
||||
aadd( ::aData, { hSocket, len( ::aData ) + 1, .t., pad( cIP, 15 ), nPort, dtoc( date() ) + " " + time(), space( 18 ), 0, 0, pConnectionSocket, 0 } )
|
||||
ENDIF
|
||||
hb_mutexUnlock( ::pMtx )
|
||||
ENDIF
|
||||
::nNumConxn++
|
||||
::oDlg:title := ::cTitle + " - " + ltrim( str( ::nNumConxn, 6, 0 ) )
|
||||
::refresh()
|
||||
|
||||
RETURN NIL
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:unregister_connection( pConnectionSocket )
|
||||
LOCAL n
|
||||
|
||||
HB_SYMBOL_UNUSED( pConnectionSocket )
|
||||
::nNumConxn--
|
||||
::oDlg:title := ::cTitle + " - " + ltrim( str( ::nNumConxn, 6, 0 ) )
|
||||
if ( n := ascan( ::aData, {|e_| e_[ DAT_HBSOCKET ] == hSocket } ) ) > 0
|
||||
IF hb_mutexLock( ::pMtx )
|
||||
::aData[ n, DAT_ACTIVATED ] := .f.
|
||||
::aData[ n, DAT_TIMEOUT ] := dtoc( date() ) + " " + time()
|
||||
::aData[ n, DAT_HBSOCKET ] := NIL
|
||||
::aData[ n, DAT_CONNSOCKET ] := NIL
|
||||
hb_mutexUnlock( ::pMtx )
|
||||
ENDIF
|
||||
ENDIF
|
||||
hSocket := NIL
|
||||
::refresh()
|
||||
|
||||
RETURN NIL
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:execEvent( cEvent, p )
|
||||
LOCAL qEvent, oMenu, txt_, s
|
||||
|
||||
SWITCH cEvent
|
||||
CASE "browser_contextMenu"
|
||||
oMenu := XbpMenu():new():create()
|
||||
oMenu:addItem( { "Terminate", {|| ::terminate() } } )
|
||||
oMenu:popup( ::oBrw, p )
|
||||
EXIT
|
||||
CASE "tool_button_clicked"
|
||||
SWITCH p
|
||||
CASE "Help"
|
||||
Hb_Usage()
|
||||
EXIT
|
||||
CASE "About"
|
||||
txt_:= {}
|
||||
AAdd( txt_, "<b>Harbour NetIO Server</b>" )
|
||||
AAdd( txt_, "Developed by:" )
|
||||
AAdd( txt_, "Przemyslaw Czerpak" )
|
||||
AAdd( txt_, "Viktor Szakats" )
|
||||
AAdd( txt_, "Pritpal Bedi" )
|
||||
AAdd( txt_, "" )
|
||||
AAdd( txt_, "built with:" )
|
||||
AAdd( txt_, HB_VERSION() )
|
||||
AAdd( txt_, HB_COMPILER() )
|
||||
AAdd( txt_, "Qt " + QT_VERSION_STR() )
|
||||
AAdd( txt_, "" )
|
||||
AAdd( txt_, "Visit the project website at:" )
|
||||
AAdd( txt_, "<a href='http://harbour-project.org/'>http://harbour-project.org/</a>" )
|
||||
s := ""
|
||||
aeval( txt_, {|e| s += e + chr( 10 ) } )
|
||||
MsgBox( s, " About NetIO Server" )
|
||||
EXIT
|
||||
CASE "Terminate"
|
||||
::terminate()
|
||||
EXIT
|
||||
CASE "Exit"
|
||||
PostAppEvent( xbeP_Quit, , , ::oDlg )
|
||||
EXIT
|
||||
ENDSWITCH
|
||||
EXIT
|
||||
CASE "QEvent_WindowStateChange"
|
||||
qEvent := QWindowStateChangeEventFromPointer( p )
|
||||
::nPrevWindowState := qEvent:oldState()
|
||||
EXIT
|
||||
CASE "QEvent_Hide"
|
||||
IF ::lSystemTrayAvailable
|
||||
qEvent := QHideEventFromPointer( p )
|
||||
IF ! ::lChanging
|
||||
::lChanging := .t.
|
||||
IF qEvent:spontaneous()
|
||||
IF empty( ::qTimer )
|
||||
::qTimer := QTimer()
|
||||
::qTimer:setSingleShot( .t. )
|
||||
::qTimer:setInterval( 250 )
|
||||
::qTimer:connect( "timeout()", {|| ::execEvent( "qTimer_timeOut" ) } )
|
||||
ENDIF
|
||||
::qTimer:start()
|
||||
qEvent:ignore()
|
||||
ENDIF
|
||||
::lChanging := .f.
|
||||
ENDIF
|
||||
ENDIF
|
||||
EXIT
|
||||
CASE "qTimer_timeOut"
|
||||
::oDlg:hide()
|
||||
::oSys:setToolTip( "Harbour NetIO Server: " + ::oDlg:title )
|
||||
::oSys:show()
|
||||
EXIT
|
||||
CASE "qSystemTrayIcon_activated"
|
||||
IF p == QSystemTrayIcon_Trigger
|
||||
::showDlgBySystemTrayIconCommand()
|
||||
ELSEIF p == QSystemTrayIcon_DoubleClick
|
||||
ELSEIF p == QSystemTrayIcon_Context
|
||||
ELSEIF p == QSystemTrayIcon_MiddleClick
|
||||
ENDIF
|
||||
EXIT
|
||||
CASE "qSystemTrayIcon_show"
|
||||
::showDlgBySystemTrayIconCommand()
|
||||
EXIT
|
||||
CASE "qSystemTrayIcon_close"
|
||||
PostAppEvent( xbeP_Quit, NIL, NIL, ::oDlg )
|
||||
EXIT
|
||||
ENDSWITCH
|
||||
|
||||
RETURN 0
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:showDlgBySystemTrayIconCommand()
|
||||
|
||||
::oSys:hide()
|
||||
|
||||
IF hb_bitAnd( ::nPrevWindowState, Qt_WindowMaximized ) == Qt_WindowMaximized
|
||||
::oDlg:oWidget:showMaximized()
|
||||
ELSEIF hb_bitAnd( ::nPrevWindowState, Qt_WindowFullScreen ) == Qt_WindowFullScreen
|
||||
::oDlg:oWidget:showFullScreen()
|
||||
ELSE
|
||||
::oDlg:oWidget:showNormal()
|
||||
ENDIF
|
||||
|
||||
::oDlg:oWidget:raise()
|
||||
::oDlg:oWidget:activateWindow()
|
||||
|
||||
RETURN NIL
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:buildBrowser()
|
||||
LOCAL s
|
||||
|
||||
::oBrw := XbpBrowse():new():create( ::oDlg:drawingArea, , { 0,0 }, ::oDlg:currentSize() )
|
||||
::oBrw:setFontCompoundName( "10.Courier" )
|
||||
|
||||
::qLayout:addWidget( ::oBrw:oWidget, 0, 0, 1, 1 )
|
||||
|
||||
::oBrw:skipBlock := {|n| ::skipBlock( n ) }
|
||||
::oBrw:goTopBlock := {| | ::goTop() }
|
||||
::oBrw:goBottomBlock := {| | ::goBottom() }
|
||||
//
|
||||
::oBrw:firstPosBlock := {| | 1 }
|
||||
::oBrw:lastPosBlock := {| | ::lastRec() }
|
||||
|
||||
::oBrw:posBlock := {| | ::recNo() }
|
||||
::oBrw:goPosBlock := {|n| ::goto( n ) }
|
||||
::oBrw:phyPosBlock := {| | ::recNo() }
|
||||
|
||||
::oBrw:hbContextMenu := {|mp1| ::execEvent( "browser_contextMenu", mp1 ) }
|
||||
|
||||
s := "selection-background-color: qlineargradient(x1: 0, y1: 0, x2: 0.5, y2: 0.5, stop: 0 #FF92BB, stop: 1 gray); "
|
||||
::oBrw:setStyleSheet( s )
|
||||
|
||||
::oBrw:cursorMode := XBPBRW_CURSOR_ROW
|
||||
|
||||
::buildColumns()
|
||||
|
||||
::oBrw:oWidget:show()
|
||||
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:terminate()
|
||||
|
||||
IF ::aData[ ::recNo(), DAT_ACTIVATED ] .AND. ::aData[ ::recNo(), DAT_CONNSOCKET ] != NIL
|
||||
IF ConfirmBox( , ;
|
||||
"Terminating: " + ::aData[ ::recNo(), DAT_IP ] + " : " + hb_ntos( ::aData[ ::recNo(), DAT_PORT ] ), ;
|
||||
"Critical, be careful", ;
|
||||
, ;
|
||||
XBPMB_CRITICAL ) == XBPMB_RET_OK
|
||||
|
||||
netio_serverStop( ::aData[ ::recNo(), DAT_CONNSOCKET ], .t. )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:refresh()
|
||||
::oBrw:refreshAll()
|
||||
::oBrw:forceStable()
|
||||
::oDlg:oWidget:setGeometry( ::oDlg:oWidget:geometry() )
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:skipBlock( nHowMany )
|
||||
LOCAL nRecs, nCurPos, nSkipped
|
||||
|
||||
nRecs := len( ::aData )
|
||||
nCurPos := ::nCurRec
|
||||
|
||||
IF nHowMany >= 0
|
||||
IF ( nCurpos + nHowMany ) > nRecs
|
||||
nSkipped := nRecs - nCurpos
|
||||
::nCurRec := nRecs
|
||||
ELSE
|
||||
nSkipped := nHowMany
|
||||
::nCurRec += nHowMany
|
||||
ENDIF
|
||||
ELSE
|
||||
IF ( nCurpos + nHowMany ) < 1
|
||||
nSkipped := 1 - nCurpos
|
||||
::nCurRec := 1
|
||||
ELSE
|
||||
nSkipped := nHowMany
|
||||
::nCurRec += nHowMany
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN nSkipped
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:goTop()
|
||||
::nCurRec := 1
|
||||
::refresh()
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:goBottom()
|
||||
::nCurRec := len( ::aData )
|
||||
::refresh()
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:goto( nRec )
|
||||
IF nRec > 0 .AND. nRec <= len( ::aData )
|
||||
::nCurRec := nRec
|
||||
::refresh()
|
||||
ENDIF
|
||||
RETURN .t.
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:lastRec()
|
||||
RETURN len( ::aData )
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:recNo()
|
||||
RETURN ::nCurRec
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:buildColumns()
|
||||
LOCAL aPP, oXbpColumn
|
||||
LOCAL nClrBG := GRA_CLR_WHITE
|
||||
LOCAL nClrHFg := GRA_CLR_YELLOW
|
||||
LOCAL nClrHBg := GRA_CLR_BLUE
|
||||
|
||||
aPP := {}
|
||||
aadd( aPP, { XBP_PP_COL_HA_CAPTION , "Sr" } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_FGCLR , nClrHFg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_BGCLR , nClrHBg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_HEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_BGCLR , nClrBG } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_DARKGRAY } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWHEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWWIDTH , 40 } )
|
||||
//
|
||||
oXbpColumn := XbpColumn():new()
|
||||
oXbpColumn:dataLink := {|| strzero( ::aData[ ::recNo(), DAT_SERIAL ], 4 ) }
|
||||
oXbpColumn:create( , , , , aPP )
|
||||
::oBrw:addColumn( oXbpColumn )
|
||||
|
||||
aPP := {}
|
||||
aadd( aPP, { XBP_PP_COL_HA_CAPTION , "Actv" } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_FGCLR , nClrHFg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_BGCLR , nClrHBg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_HEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_BGCLR , nClrBG } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_DARKGRAY } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWHEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWWIDTH , 45 } )
|
||||
//
|
||||
oXbpColumn := XbpColumn():new()
|
||||
oXbpColumn:dataLink := {|| iif( ::aData[ ::recNo(), DAT_ACTIVATED ], " ", "X" ) }
|
||||
oXbpColumn:create( , , , , aPP )
|
||||
::oBrw:addColumn( oXbpColumn )
|
||||
|
||||
aPP := {}
|
||||
aadd( aPP, { XBP_PP_COL_HA_CAPTION , "IP" } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_FGCLR , nClrHFg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_BGCLR , nClrHBg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_HEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_BGCLR , nClrBG } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_DARKGRAY } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWHEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWWIDTH , 150 } )
|
||||
//
|
||||
oXbpColumn := XbpColumn():new()
|
||||
oXbpColumn:dataLink := {|| ::aData[ ::recNo(), DAT_IP ] }
|
||||
oXbpColumn:create( , , , , aPP )
|
||||
::oBrw:addColumn( oXbpColumn )
|
||||
|
||||
aPP := {}
|
||||
aadd( aPP, { XBP_PP_COL_HA_CAPTION , "Port" } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_FGCLR , nClrHFg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_BGCLR , nClrHBg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_HEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_BGCLR , nClrBG } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_DARKGRAY } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWHEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWWIDTH , 55 } )
|
||||
//
|
||||
oXbpColumn := XbpColumn():new()
|
||||
oXbpColumn:dataLink := {|| str( ::aData[ ::recNo(), DAT_PORT ], 5, 0 ) }
|
||||
oXbpColumn:create( , , , , aPP )
|
||||
::oBrw:addColumn( oXbpColumn )
|
||||
|
||||
aPP := {}
|
||||
aadd( aPP, { XBP_PP_COL_HA_CAPTION , "DateTime IN" } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_FGCLR , nClrHFg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_BGCLR , nClrHBg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_HEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_BGCLR , nClrBG } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_DARKGRAY } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWHEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWWIDTH , 152 } )
|
||||
//
|
||||
oXbpColumn := XbpColumn():new()
|
||||
oXbpColumn:dataLink := {|| ::aData[ ::recNo(), DAT_TIMEIN ] }
|
||||
oXbpColumn:create( , , , , aPP )
|
||||
::oBrw:addColumn( oXbpColumn )
|
||||
|
||||
aPP := {}
|
||||
aadd( aPP, { XBP_PP_COL_HA_CAPTION , "DateTime OUT" } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_FGCLR , nClrHFg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_BGCLR , nClrHBg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_HEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_BGCLR , nClrBG } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_DARKGRAY } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWHEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWWIDTH , 152 } )
|
||||
//
|
||||
oXbpColumn := XbpColumn():new()
|
||||
oXbpColumn:dataLink := {|| ::aData[ ::recNo(), DAT_TIMEOUT ] }
|
||||
oXbpColumn:create( , , , , aPP )
|
||||
::oBrw:addColumn( oXbpColumn )
|
||||
|
||||
aPP := {}
|
||||
aadd( aPP, { XBP_PP_COL_HA_CAPTION , "KbIN" } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_FGCLR , nClrHFg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_BGCLR , nClrHBg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_HEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_BGCLR , nClrBG } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_DARKGRAY } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWHEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWWIDTH , 60 } )
|
||||
//
|
||||
oXbpColumn := XbpColumn():new()
|
||||
oXbpColumn:dataLink := {|| str( ::aData[ ::recNo(), DAT_BYTESIN ], 6, 0 ) }
|
||||
oXbpColumn:create( , , , , aPP )
|
||||
::oBrw:addColumn( oXbpColumn )
|
||||
|
||||
aPP := {}
|
||||
aadd( aPP, { XBP_PP_COL_HA_CAPTION , "KbOUT" } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_FGCLR , nClrHFg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_BGCLR , nClrHBg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_HEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_BGCLR , nClrBG } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_DARKGRAY } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWHEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWWIDTH , 60 } )
|
||||
//
|
||||
oXbpColumn := XbpColumn():new()
|
||||
oXbpColumn:dataLink := {|| str( ::aData[ ::recNo(), DAT_BYTESOUT ], 6, 0 ) }
|
||||
oXbpColumn:colorBlock := {|| iif( ::aData[ ::recNo,3 ], { GRA_CLR_BLACK, nClrBG }, { GRA_CLR_RED, nClrBG } ) }
|
||||
oXbpColumn:create( , , , , aPP )
|
||||
::oBrw:addColumn( oXbpColumn )
|
||||
|
||||
aPP := {}
|
||||
aadd( aPP, { XBP_PP_COL_HA_CAPTION , "Files" } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_FGCLR , nClrHFg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_BGCLR , nClrHBg } )
|
||||
aadd( aPP, { XBP_PP_COL_HA_HEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_FGCLR , GRA_CLR_BLACK } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_BGCLR , nClrBG } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_WHITE } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_DARKGRAY } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWHEIGHT , 20 } )
|
||||
aadd( aPP, { XBP_PP_COL_DA_ROWWIDTH , 60 } )
|
||||
//
|
||||
oXbpColumn := XbpColumn():new()
|
||||
oXbpColumn:dataLink := {|| str( iif( empty( ::aData[ ::recNo(), DAT_CONNSOCKET ] ), 0, ;
|
||||
netio_srvOpenFiles( ::aData[ ::recNo(), DAT_CONNSOCKET ] ) ), 6, 0 ) }
|
||||
oXbpColumn:create( , , , , aPP )
|
||||
::oBrw:addColumn( oXbpColumn )
|
||||
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:buildToolBar()
|
||||
LOCAL oTBar
|
||||
|
||||
oTBar := XbpToolBar():new( ::oDlg )
|
||||
oTBar:imageWidth := 40
|
||||
oTBar:imageHeight := 40
|
||||
oTBar:create( , , { 0, ::oDlg:currentSize()[ 2 ]-60 }, { ::oDlg:currentSize()[ 1 ], 60 } )
|
||||
oTBar:oWidget:setAllowedAreas( Qt_LeftToolBarArea + Qt_RightToolBarArea + Qt_TopToolBarArea + Qt_BottomToolBarArea )
|
||||
oTBar:oWidget:setFocusPolicy( Qt_NoFocus )
|
||||
|
||||
oTBar:buttonClick := {|oButton| ::execEvent( "tool_button_clicked", oButton:key ) }
|
||||
|
||||
oTBar:addItem( "Exit" , ":/exit.png" , , , , , "Exit" )
|
||||
oTBar:addItem( , , , , , XBPTOOLBAR_BUTTON_SEPARATOR )
|
||||
oTBar:addItem( "Terminate", ":/terminate.png", , , , , "Terminate" )
|
||||
oTBar:addItem( "About" , ":/about.png" , , , , , "About" )
|
||||
oTBar:addItem( "Help" , ":/help.png" , , , , , "Help" )
|
||||
|
||||
RETURN NIL
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:confirmExit()
|
||||
|
||||
IF ConfirmBox( , "Do you want to shut-down the server ?", " Please confirm", XBPMB_YESNO, XBPMB_CRITICAL ) == XBPMB_RET_YES
|
||||
PostAppEvent( xbeP_Quit, , , ::oDlg )
|
||||
ENDIF
|
||||
|
||||
RETURN NIL
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD NetIOServer:buildSystemTray()
|
||||
|
||||
IF empty( ::oSys )
|
||||
::oSys := QSystemTrayIcon( ::oDlg:oWidget )
|
||||
IF ( ::lSystemTrayAvailable := ::oSys:isSystemTrayAvailable() )
|
||||
::oSys:setIcon( ":/harbour.png" )
|
||||
::oSys:connect( "activated(QSystemTrayIcon::ActivationReason)", {|p| ::execEvent( "qSystemTrayIcon_activated", p ) } )
|
||||
|
||||
::oSysMenu := QMenu()
|
||||
::qAct1 := ::oSysMenu:addAction( ":/fullscreen.png", "&Show" )
|
||||
::oSysMenu:addSeparator()
|
||||
::qAct2 := ::oSysMenu:addAction( ":/exit.png", "&Exit" )
|
||||
|
||||
::qAct1:connect( "triggered(bool)", {|| ::execEvent( "qSystemTrayIcon_show" ) } )
|
||||
::qAct2:connect( "triggered(bool)", {|| ::execEvent( "qSystemTrayIcon_close" ) } )
|
||||
|
||||
::oSys:setContextMenu( ::oSysMenu )
|
||||
::oSys:hide()
|
||||
::oSys:setToolTip( "Harbour NetIO Server: " + ::oDlg:title )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN nil
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
STATIC FUNCTION AppSys()
|
||||
RETURN ( NIL )
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
STATIC FUNCTION FileSig( cFile )
|
||||
LOCAL hFile
|
||||
LOCAL cBuff, cSig, cExt
|
||||
|
||||
cExt := ".prg"
|
||||
hFile := FOpen( cFile, FO_READ )
|
||||
IF hFile != F_ERROR
|
||||
cSig := hb_hrbSignature()
|
||||
cBuff := Space( Len( cSig ) )
|
||||
FRead( hFile, @cBuff, Len( cSig ) )
|
||||
FClose( hFile )
|
||||
IF cBuff == cSig
|
||||
cExt := ".hrb"
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN cExt
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
STATIC PROCEDURE ShowConfig( netiosrv )
|
||||
LOCAL cMsg := ""
|
||||
|
||||
cMsg += "Listening on: " + netiosrv[ _NETIOSRV_cIFAddr ] + ":" + hb_ntos( netiosrv[ _NETIOSRV_nPort ] ) + hb_eol()
|
||||
cMsg += "Root filesystem: " + netiosrv[ _NETIOSRV_cRootDir ] + hb_eol()
|
||||
cMsg += "RPC support: " + iif( netiosrv[ _NETIOSRV_lRPC ], "enabled", "disabled" ) + hb_eol()
|
||||
cMsg += "Encryption: " + iif( netiosrv[ _NETIOSRV_lEncryption ], "enabled", "disabled" ) + hb_eol()
|
||||
cMsg += "RPC filter module: " + iif( Empty( netiosrv[ _NETIOSRV_hRPCFHRB ] ), iif( netiosrv[ _NETIOSRV_lRPC ], "not set (WARNING: unsafe open server)", "not set" ), netiosrv[ _NETIOSRV_cRPCFFileName ] )
|
||||
|
||||
MsgBox( cMsg )
|
||||
|
||||
RETURN
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
STATIC PROCEDURE HB_Logo()
|
||||
|
||||
MsgBox( "Harbour NETIO Server " + HBRawVersion() + hb_eol() +;
|
||||
"Copyright (c) 2009-2011, Przemyslaw Czerpak" + hb_eol() + ;
|
||||
"http://harbour-project.org/" )
|
||||
|
||||
RETURN
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
STATIC PROCEDURE HB_Usage()
|
||||
LOCAL aMsg := {}
|
||||
LOCAL cMsg
|
||||
|
||||
AAdd( aMsg, "Syntax:" )
|
||||
AAdd( aMsg, " " )
|
||||
AAdd( aMsg, " netiosrv [options]" )
|
||||
AAdd( aMsg, " " )
|
||||
AAdd( aMsg, "Options:" )
|
||||
AAdd( aMsg, " " )
|
||||
AAdd( aMsg, " -port=<port> accept incoming connections on IP port <port>" )
|
||||
AAdd( aMsg, " -iface=<ipaddr> accept incoming connections on IPv4 interface <ipaddress>" )
|
||||
AAdd( aMsg, " -rootdir=<rootdir> use <rootdir> as root directory for served file system" )
|
||||
AAdd( aMsg, " -rpc accept RPC requests" )
|
||||
AAdd( aMsg, " -rpc=<file.hrb> set RPC processor .hrb module to <file.hrb>" )
|
||||
AAdd( aMsg, hb_StrFormat( " file.hrb needs to have an entry function named %1$s()", _RPC_FILTER ) )
|
||||
AAdd( aMsg, " -pass=<passwd> set server password" )
|
||||
AAdd( aMsg, " " )
|
||||
AAdd( aMsg, " --version display version header only" )
|
||||
AAdd( aMsg, " -help|--help this help" )
|
||||
|
||||
cMsg := ""
|
||||
aeval( aMsg, {|e| cMsg += e + chr( 10 ) } )
|
||||
MsgBox( cMsg )
|
||||
|
||||
RETURN
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
STATIC FUNCTION HBRawVersion()
|
||||
RETURN StrTran( Version(), "Harbour " )
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
STATIC FUNCTION xtos( xVrb )
|
||||
|
||||
SWITCH valtype( xVrb )
|
||||
CASE "C"
|
||||
RETURN xVrb
|
||||
CASE "N"
|
||||
RETURN ltrim( str( xVrb ) )
|
||||
CASE "L"
|
||||
RETURN iif( xVrb, "T", "F" )
|
||||
CASE "M"
|
||||
RETURN xVrb
|
||||
CASE "A"
|
||||
RETURN "A"
|
||||
OTHERWISE
|
||||
RETURN ""
|
||||
ENDSWITCH
|
||||
|
||||
RETURN NIL
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
10
harbour/contrib/hbnetio/utils/netiosrvq.qrc
Normal file
@@ -0,0 +1,10 @@
|
||||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource>
|
||||
<file>harbour.png</file>
|
||||
<file>exit.png</file>
|
||||
<file>fullscreen.png</file>
|
||||
<file>help.png</file>
|
||||
<file>about.png</file>
|
||||
<file>terminate.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
24
harbour/contrib/hbnetio/utils/netiosrvqt.hbp
Normal file
@@ -0,0 +1,24 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
-3rd=hbide_version=1.0
|
||||
-3rd=hbide_title=NetIOServerQt
|
||||
-3rd=hbide_output=netiosrvqt
|
||||
|
||||
-gui
|
||||
-mt
|
||||
-w3
|
||||
-prgflag=-l-
|
||||
-icon={allwin}harbour.ico
|
||||
|
||||
../../hbqt/hbqtuitools.hbc
|
||||
../../hbxbp/hbxbp.hbc
|
||||
../../hbnetio/hbnetio.hbc
|
||||
|
||||
netiosrvq.prg
|
||||
netiosrvq.qrc
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
harbour/contrib/hbnetio/utils/terminate.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
@@ -73,7 +73,7 @@
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS Xbp3State INHERIT XbpWindow, XbpDataRef
|
||||
CLASS Xbp3State INHERIT XbpWindow, DataRef
|
||||
|
||||
DATA autosize INIT .F.
|
||||
DATA caption INIT ""
|
||||
|
||||
@@ -3548,7 +3548,7 @@ METHOD XbpBrowse:setStyle( nStyle, lNewValue )
|
||||
/*----------------------------------------------------------------------*/
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CREATE CLASS XbpColumn INHERIT XbpWindow, XbpDataRef
|
||||
CREATE CLASS XbpColumn INHERIT XbpWindow, DataRef
|
||||
|
||||
EXPORTED:
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS XbpCheckBox INHERIT XbpWindow, XbpDataRef
|
||||
CLASS XbpCheckBox INHERIT XbpWindow, DataRef
|
||||
|
||||
DATA autosize INIT .F.
|
||||
DATA caption INIT ""
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS XbpDataRef
|
||||
CLASS DataRef
|
||||
|
||||
DATA changed INIT .F.
|
||||
DATA dataLink INIT NIL
|
||||
@@ -95,13 +95,13 @@ CLASS XbpDataRef
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD XbpDataRef:new()
|
||||
METHOD DataRef:new()
|
||||
|
||||
RETURN self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD XbpDataRef:getData()
|
||||
METHOD DataRef:getData()
|
||||
LOCAL cClass := __ObjGetClsName( self )
|
||||
|
||||
DO CASE
|
||||
@@ -135,7 +135,7 @@ METHOD XbpDataRef:getData()
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD XbpDataRef:setData( xValue, mp2 )
|
||||
METHOD DataRef:setData( xValue, mp2 )
|
||||
LOCAL cClass := __ObjGetClsName( self )
|
||||
|
||||
HB_SYMBOL_UNUSED( mp2 )
|
||||
@@ -198,13 +198,13 @@ METHOD XbpDataRef:setData( xValue, mp2 )
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD XbpDataRef:undo()
|
||||
METHOD DataRef:undo()
|
||||
|
||||
RETURN .f.
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD XbpDataRef:validate( xParam )
|
||||
METHOD DataRef:validate( xParam )
|
||||
|
||||
IF PCount() == 0 .AND. hb_isBlock( ::sl_validate )
|
||||
RETURN eval( ::sl_validate, self )
|
||||
@@ -216,7 +216,7 @@ METHOD XbpDataRef:validate( xParam )
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD XbpDataRef:editBuffer( xData )
|
||||
METHOD DataRef:editBuffer( xData )
|
||||
|
||||
IF !( xData == NIL )
|
||||
::sl_editBuffer := xData
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS XbpListBox INHERIT XbpWindow, XbpDataRef
|
||||
CLASS XbpListBox INHERIT XbpWindow, DataRef
|
||||
|
||||
DATA adjustHeight INIT .F.
|
||||
DATA horizScroll INIT .F.
|
||||
|
||||
@@ -617,15 +617,6 @@ METHOD XbpMenuBar:onMenuKey( ... )
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD xbpMenuBar:setStyleSheet( cCSS, cCSSPops )
|
||||
#if 0
|
||||
LOCAL aChild
|
||||
|
||||
FOR EACH aChild IN ::aItems
|
||||
IF hb_isObject( aChild[ 1 ] == QMF_POPUP )
|
||||
aChild[ 2 ]:setStyleSheet( cCSSPops )
|
||||
ENDIF
|
||||
NEXT
|
||||
#endif
|
||||
LOCAL oMenu
|
||||
|
||||
FOR EACH oMenu IN ::aChildren
|
||||
@@ -708,9 +699,12 @@ METHOD xbpMenu:create( oParent, aPresParams, lVisible )
|
||||
::xbpWindow:create( oParent, , , , aPresParams, lVisible )
|
||||
|
||||
::oWidget := QMenu()
|
||||
::oParent:oWidget:addMenu( ::oWidget )
|
||||
|
||||
::oParent:addChild( self )
|
||||
IF hb_isObject( oParent )
|
||||
::oParent:oWidget:addMenu( ::oWidget )
|
||||
::oParent:addChild( self )
|
||||
ENDIF
|
||||
|
||||
::postCreate()
|
||||
|
||||
RETURN Self
|
||||
@@ -730,13 +724,16 @@ METHOD xbpMenu:setTitle( cTitle )
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD xbpMenu:popUp( oXbp, aPos, nDefaultItem, nControl )
|
||||
LOCAL qPoint := QPoint( aPos[ 1 ], aPos[ 2 ] )
|
||||
|
||||
HB_SYMBOL_UNUSED( oXbp )
|
||||
HB_SYMBOL_UNUSED( aPos )
|
||||
HB_SYMBOL_UNUSED( nDefaultItem )
|
||||
HB_SYMBOL_UNUSED( nControl )
|
||||
|
||||
RETURN 0
|
||||
::oWidget:exec( qPoint )
|
||||
|
||||
RETURN .f.
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS XbpMLE INHERIT XbpWindow, XbpDataRef
|
||||
CLASS XbpMLE INHERIT XbpWindow, DataRef
|
||||
|
||||
DATA border INIT .T.
|
||||
DATA editable INIT .T.
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS XbpRadioButton INHERIT XbpWindow, XbpDataRef
|
||||
CLASS XbpRadioButton INHERIT XbpWindow, DataRef
|
||||
|
||||
DATA autosize INIT .F.
|
||||
DATA caption INIT ""
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS XbpScrollBar INHERIT XbpWindow, XbpDataRef
|
||||
CLASS XbpScrollBar INHERIT XbpWindow, DataRef
|
||||
|
||||
DATA autoTrack INIT .t.
|
||||
DATA range INIT {0,1}
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS XbpSLE INHERIT XbpWindow, XbpDataRef
|
||||
CLASS XbpSLE INHERIT XbpWindow, DataRef
|
||||
|
||||
DATA align INIT XBPSLE_LEFT
|
||||
DATA autoKeyboard INIT .T.
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS XbpSpinButton INHERIT XbpWindow, XbpDataRef
|
||||
CLASS XbpSpinButton INHERIT XbpWindow, DataRef
|
||||
|
||||
DATA fastSpin INIT .f.
|
||||
DATA master
|
||||
|
||||
@@ -270,7 +270,7 @@ METHOD XbpToolbar:addItem( cCaption, xImage, xDisabledImage, xHotImage, cDLL, nS
|
||||
oBtn:oAction := QAction( ::oWidget )
|
||||
oBtn:oAction:setText( cCaption )
|
||||
|
||||
IF valtype( xImage ) == "C" .and. hb_FileExists( xImage )
|
||||
IF valtype( xImage ) == "C"
|
||||
oBtn:oAction:setIcon( xImage )
|
||||
ENDIF
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS XbpTreeView INHERIT XbpWindow, XbpDataRef
|
||||
CLASS XbpTreeView INHERIT XbpWindow, DataRef
|
||||
|
||||
DATA alwaysShowSelection INIT .F.
|
||||
DATA hasButtons INIT .F.
|
||||
@@ -361,7 +361,7 @@ METHOD XbpTreeView:itemSelected( ... )
|
||||
/* Class XbpTreeViewItem */
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
CLASS XbpTreeViewItem INHERIT XbpDataRef
|
||||
CLASS XbpTreeViewItem INHERIT DataRef
|
||||
|
||||
DATA oWidget
|
||||
|
||||
|
||||
@@ -135,7 +135,6 @@ CLASS XbpWindow INHERIT XbpPartHandler
|
||||
DATA hBrushBG
|
||||
DATA is_hidden INIT .F.
|
||||
DATA is_enabled INIT .T.
|
||||
DATA title INIT " "
|
||||
DATA icon INIT 0
|
||||
DATA closable INIT .T.
|
||||
DATA resizable INIT .T.
|
||||
@@ -189,6 +188,9 @@ CLASS XbpWindow INHERIT XbpPartHandler
|
||||
METHOD setPresParam( aPPNew )
|
||||
METHOD setStyleSheet( cCSS ) INLINE ::oWidget:setStyleSheet( ::oWidget:styleSheet() + " " + cCSS )
|
||||
|
||||
DATA cTitle INIT ""
|
||||
METHOD title( cTitle ) SETGET
|
||||
|
||||
METHOD enter( ... ) SETGET
|
||||
METHOD leave( ... ) SETGET
|
||||
METHOD lbClick( ... ) SETGET
|
||||
@@ -1323,6 +1325,20 @@ METHOD XbpWindow:hasInputFocus()
|
||||
|
||||
RETURN ::oWidget:hasFocus()
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD XbpWindow:title( cTitle )
|
||||
LOCAL xTitle := ::cTitle
|
||||
|
||||
IF hb_isChar( cTitle )
|
||||
::cTitle := cTitle
|
||||
IF hb_isObject( ::oWidget )
|
||||
::oWidget:setWindowTitle( ::cTitle )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN xTitle
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
* Callback Methods
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||