Caros,
Qual função do harbour permite deixar um programa rodando em processo, como é feito no letodb?
Deixar o NetIO em Processo
Moderador: Moderadores
Deixar o NetIO em Processo
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Re: Deixar o NetIO em Processo
Pessoal,
Acabei fazendo com HWGUI.
Eis o código.
Para LetoDB: Usando funções do letodb
Para NetIO
Acabei fazendo com HWGUI.
Eis o código.
Para LetoDB: Usando funções do letodb
Código: Selecionar todos
#include "common.ch"
#include "windows.ch"
#include "guilib.ch"
FUNCTION Main( nPort, cIfAddr, cRootDir, xRPC, ... )
LOCAL hWrite := Hash(), hRead:= HB_ReadIni( "LETODB.INI" ), N
LOCAL oMainWindow, oTrayMenu, oIcon := HIcon():AddResource("ICON_1")
PRIVATE c_Port:="2815", c_DataPath:="DB/", c_LogFile:='"'+'letodb.log'+'"', c_Default_Driver:="CDX", c_Lower_Path:="0", c_EnableFileFunc:="1"
PRIVATE c_Ip:=Verifica_Ip()
PRIVATE cServidorDB
IF !File("LETODB.INI")
hWrite["MAIN" ] := Hash()
hWrite["MAIN" ]["Port"] := c_Port
hWrite["MAIN" ]["DataPath"] := c_DataPath
hWrite["MAIN" ]["LogFile"] := c_LogFile
hWrite["MAIN" ]["Default_Driver"] := c_Default_Driver
hWrite["MAIN" ]["Lower_Path"] := c_Lower_Path
hWrite["MAIN" ]["EnableFileFunc"] := c_EnableFileFunc
hWrite["MAIN" ]["IP"] := c_IP
HB_WriteIni( "LETODB.INI", hWrite,"--- Inicio ---", "--- Fim ---" )
ENDIF
IF !File("LETODB.EXE")
MsgInfo( "LetoDB.EXE não encontrado")
RETURN Nil
ENDIF
cServidorDB:='//'+c_Ip+':'+c_Port+'/'
IF Leto_Connect( cServidorDB ) == -1
ShellExecute( "letodb.exe",,, "")
ELSE
//-----------------------------------------------------------
//Se o servidor já está rodando, o sistema não será iniciado.
//-----------------------------------------------------------
RETURN Nil
ENDIF
INIT WINDOW oMainWindow MAIN TITLE "Servidor LetoDb"
CONTEXT MENU oTrayMenu
MENUITEM "Reiniciar o Servidor" ACTION IniciarServidor()
MENUITEM "Parar o Servidor" ACTION PararServidor()
SEPARATOR
MENUITEM "Sair" ACTION Sair()
ENDMENU
oMainWindow:InitTray( oIcon,,oTrayMenu,"Servidor LetoDB" )
ACTIVATE WINDOW oMainWindow NOSHOW
oTrayMenu:End()
RETURN Nil
FUNCTION Sair
PararServidor()
EndWindow()
RETURN Nil
FUNCTION Verifica_Ip
LOCAL aHosts, cName, cEstacao:=netname(.f.)
hb_InetInit()
aHosts := hb_InetGetHosts( cEstacao )
IF aHosts == NIL
aHosts := hb_InetGetAlias( cEstacao )
ENDIF
IF Empty(aHosts)
aHosts := hb_InetGetAlias( cEstacao )
ENDIF
hb_InetCleanup()
RETURN ahosts[1]
FUNCTION PararServidor
IF Leto_Connect( cServidorDB ) <> -1
ShellExecute( "letodb.exe",, "stop", "")
ENDIF
RETURN Nil
FUNCTION IniciarServidor
PararServidor()
ShellExecute( "letodb.exe",,, "")
RETURN Nil
Código: Selecionar todos
#include "common.ch"
#include "windows.ch"
#include "guilib.ch"
FUNCTION Main( nPort, cIfAddr, cRootDir, xRPC, ... )
LOCAL hWrite := Hash(), hRead:= HB_ReadIni( "CONFIG.INI" )
LOCAL oMainWindow, oTrayMenu, oIcon := HIcon():AddResource("ICON_1")
PRIVATE pListenSocket, c_Port:="2816", c_Path:="\DB", c_Addr:=Verifica_Ip()
REQUEST HB_DATETIME
IF !FILE("CONFIG.INI")
hWrite["MAIN" ] := Hash()
hWrite["MAIN" ]["Desc" ] := "Sistema Servidor - NetIO"
hWrite["MAIN" ]["Ver" ] := "Versao 1.2"
hWrite["CONFIGURACAO" ] := Hash()
hWrite["CONFIGURACAO" ]["Port"] := c_Port
hWrite["CONFIGURACAO" ]["Path"] := c_Path
hWrite["CONFIGURACAO" ]["Addres"] := c_Addr
HB_WriteIni( "CONFIG.INI", hWrite,"--- Inicio ---", "--- Fim ---" )
ELSE
c_Port:=hRead["CONFIGURACAO"]["Port"]
c_Path:=hRead["CONFIGURACAO"]["Path"]
c_Addr:=hRead["CONFIGURACAO"]["Addres"]
ENDIF
INIT WINDOW oMainWindow MAIN TITLE "Servidor NetIO"
pListenSocket := NetIO_mtServer( VAL(c_Port),c_Addr,,.T.)
IF Empty(pListenSocket)
MsgInfo( "Servidor não pode ser inicializado em "+c_Addr+":"+c_Port)
EndWindow()
ENDIF
CONTEXT MENU oTrayMenu
MENUITEM "Parar o Servidor" ACTION PararServidor()
MENUITEM "Reiniciar o Servidor" ACTION IniciarServidor()
SEPARATOR
MENUITEM "Sair" ACTION EndWindow()
ENDMENU
oMainWindow:InitTray( oIcon,,oTrayMenu,"Servidor NetIO" )
ACTIVATE WINDOW oMainWindow NOSHOW
oTrayMenu:End()
RETURN Nil
FUNCTION PararServidor
MEMVAR pListenSocket
IF !Empty( pListenSocket )
NetIO_ServerStop( pListenSocket )
pListenSocket := NIL
MsgInfo( "Servidor foi parado em "+c_Addr+":"+c_Port)
ENDIF
RETURN Nil
FUNCTION IniciarServidor
MEMVAR pListenSocket
IF Empty(pListenSocket)
PararServidor()
pListenSocket := NetIO_mtServer( VAL(c_Port),c_Addr,,.T.)
IF Empty(pListenSocket)
MsgInfo( "Servidor não pode ser inicializado em "+c_Addr+":"+c_Port)
EndWindow()
ELSE
MsgInfo( "Servidor foi inicializado em "+c_Addr+":"+c_Port)
ENDIF
ENDIF
RETURN Nil
FUNCTION Verifica_Ip
LOCAL aHosts, cName, cEstacao:=netname(.f.)
hb_InetInit()
aHosts := hb_InetGetHosts( cEstacao )
IF aHosts == NIL
aHosts := hb_InetGetAlias( cEstacao )
ENDIF
IF Empty(aHosts)
aHosts := hb_InetGetAlias( cEstacao )
ENDIF
hb_InetCleanup()
RETURN ahosts[1]
FUNCTION EXISTE(cIndice)
LOCAL lOk:=.F.
IF FILE("DB\"+cIndice)
lOk:=.T.
ENDIF
RETURN lOk
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
