Página 1 de 1

Deixar o NetIO em Processo

Enviado: 11 Ago 2010 11:38
por asimoes
Caros,

Qual função do harbour permite deixar um programa rodando em processo, como é feito no letodb?

Re: Deixar o NetIO em Processo

Enviado: 12 Ago 2010 22:57
por asimoes
Pessoal,

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
Para NetIO

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