Usar Servidor de DNS no NETIO

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar Servidor de DNS no NETIO

Mensagem por asimoes »

Senhores,

alguém já conseguiu usar um servidor de dns tipo no-ip ou dyndns com o netio?

[]´s
►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)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Usar Servidor de DNS no NETIO

Mensagem por sygecom »

Eu uso NO-IP sem problemas, apenas libero a porta do letodb no servidor redirecionando para o servidor onde está o letodb rodando (porta.: 2812 )
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Usar Servidor de DNS no NETIO

Mensagem por asimoes »

Olá SYGECOM,

No LetoDB eu já faço assim, eu queria saber é no HB_NETIO
►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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Usar Servidor de DNS no NETIO

Mensagem por asimoes »

Senhores,

Consegui acessar dbfs usando dyndns, o problema é que algumas funções do netio não funcionam com este tipo de acesso, funcionam somente com ip local. A netio deverá superar estes entraves, por hora o letodb está mais completo e funcional. Por exemplo para saber se um indice existe na pasta onde os dbs estão, criei uma função chamada existeindice(cIndice) na aplicação servidora.

Código: Selecionar todos

IF!Netio_FuncExec("EXISTEINDICE","BOLETOS.CDX")
  CriaIndice("BOLETOS.CDX")
ENDIF
No letodb tem a função leto_file()

Resumindo, no letodb posso usar todas as funções que ele oferece usando ip local ou dns host,
no NetIO, somente com ip local, me corrijam se eu estiver errado, pelo menos fiquei tentando descobrir por horas e nada. Falta mais documentação sobre o uso desta lib.

[]´s
►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)
clipsis
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 02 Jun 2010 11:53
Localização: brasil

Re: Usar Servidor de DNS no NETIO

Mensagem por clipsis »

Ola, boa tarde!

Antes de mais nada, sou iniciante em Harbour.

Vi os exemplos de clientes para NETio, segui da forma como aparecem.
Porém quando compilo apresenta a seguinte mensagem:

undefined reference to `HB_FUN_NETIO_FUNCEXEC'

uso uma expressão parecida como:

Código: Selecionar todos

IF!Netio_FuncExec("EXISTEINDICE","BOLETOS.CDX") 
  CriaIndice("BOLETOS.CDX") 
ENDIF 


Mudando apenas o nome da função de : EXISTEINDICE para LOCALIZAINDICE

Preciso colocar algum comando no PRG ou no arquivo HBP, para resolver ?

Fico no aguardo e obrigado.
Clipper 5.2/Blinker
Harbour 3.0/Mingw
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Usar Servidor de DNS no NETIO

Mensagem por asimoes »

Olá Clipsis,

Este programa que eu fiz é um servidor NetIO veja a função LOCALIZAINDICE(cIndice) no fonte SERVIDOR.PRG que verifica se existe o indice na pasta db\ como eu uso:

Na sua aplicação ficaria assim:
Na função Netio_FuncExec o primeiro parametro é o nome da função que está no servidor e o segundo parametro é o parametro passado para a função LOCALIZAINDICE

Adapte o fonte SERVIDOR.PRG a sua necessidade.

Código: Selecionar todos

 IF !Netio_FuncExec("LOCALIZAINDICE","PONTO.CDX")
      NetUse(cServer,cDataBase,.T.)   
      INDEX ON DTOS(DATA) TAG I001  TO (cServer+"PONTO")
      INDEX ON DTOS(DATA) TAG I002 DESCEND TO (cServer+"PONTO")
      PONTO->(DBCLOSEAREA())
ENDIF 
Fonte: SERVIDOR.PRG

Código: Selecionar todos

#include "hwgui.ch"
#include "common.ch"
#include "windows.ch"
#include "guilib.ch"

FUNCTION Main( nPort, cIfAddr, cRootDir, xRPC, ... )

LOCAL   hWrite := Hash(), hRead:= HB_ReadIni( "CONFIG.INI" )
LOCAL   oTrayMenu 
LOCAL  oIconIni:=HIcon():AddResource("ICON_2")
PRIVATE pListenSocket, c_Port:="2816", c_Path:="\DB", c_Addr:=Verifica_Ip()
REQUEST HB_DATETIME
MEMVAR->oIcon1     :=HIcon():AddResource("ICON_1")
MEMVAR->oIcon2     :=HIcon():AddResource("ICON_2")
MEMVAR->oMainWindow:=Nil
MEMVAR->oTimer     :=Nil


   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 

   cServidorDB:='//'+c_Addr+':'+c_Port+'/'
   
   INIT WINDOW MEMVAR->oMainWindow MAIN TITLE "Servidor NetIO - "+cServidorDB
   
   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 Sair()
   ENDMENU

   Liga_Timer(MEMVAR->oMainWindow,.T.)

   MEMVAR->oMainWindow:InitTray( oIconIni,,oTrayMenu,"Servidor NetIO - "+cServidorDB )

   ACTIVATE WINDOW oMainWindow NOSHOW
   oTrayMenu:End()
	   
RETURN Nil

FUNCTION MudaIcone   
STATIC nIcon  
MEMVAR oMainWindow
MEMVAR oIcon1
MEMVAR oIcon2
   IF nIcon = Nil
      nIcon:=1
   ENDIF
   Liga_Timer(oMainWindow,.F.)
   nIcon := IF(nIcon > 2, 1, nIcon)
   Muda_Icone(IF(nIcon=1,oIcon1,oIcon2))
   nIcon++
   Liga_Timer(oMainWindow,.T.)
RETURN Nil

FUNCTION Muda_Icone(oIconeX, cTexto)
LOCAL oIcon := oIconeX 
MEMVAR oMainWindow   
   ShellModifyIcon( oMainWindow:handle, oIcon:handle)
   oMainWindow:Refresh()
RETURN Nil

FUNCTION Liga_Timer(oJanela,lLiga)
MEMVAR oTimer
   IF lLiga
      SET TIMER oTimer of oJanela VALUE 1000 ACTION {|| MudaIcone() }
   ELSE
      oJanela:oTimer:End()   
   ENDIF
RETURN Nil

FUNCTION Sair
MEMVAR oMainWindow
   Liga_Timer(oMainWindow,.F.)   
   oMainWindow:oTimer:End()   
   IF MsgNoYes("Deseja Realmente Sair do Programa ?","Aviso do Sistema")
      PararServidor()
      Liberar()
   ELSE
      Liga_Timer(oMainWindow,.T.)
      RETURN Nil
   ENDIF
RETURN Nil

FUNCTION Liberar
   EndWindow()  
   ExitProcess()
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 LOCALIZAINDICE(cIndice)
LOCAL lOk:=.F.
IF FILE("DB\"+cIndice)
   lOk:=.T.
ENDIF
RETURN lOk

#pragma BEGINDUMP

#define _WIN32_IE      0x0500
#define HB_OS_WIN_32_USED
#define _WIN32_WINNT   0x0400
#include <shlobj.h>
#include <windows.h>
#include <commctrl.h>
#include "hbapi.h"
#include "hbapiitm.h"

HB_FUNC( SHOWERROR )

{
   LPVOID lpMsgBuf;
   DWORD dwError  = GetLastError();

   FormatMessage( 
      FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
      NULL,
      dwError,
      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
      (LPTSTR) &lpMsgBuf,
      0,
      NULL 
   );
   
   MessageBox(NULL, (LPCSTR)lpMsgBuf, "Shutdown", MB_OK | MB_ICONEXCLAMATION);
   // Free the buffer.
   LocalFree( lpMsgBuf );
}

HB_FUNC( ENABLEPERMISSIONS )

{
   LUID tmpLuid;
   TOKEN_PRIVILEGES tkp, tkpNewButIgnored;
   DWORD lBufferNeeded;
   HANDLE hdlTokenHandle;
   HANDLE hdlProcessHandle = GetCurrentProcess();

   OpenProcessToken(hdlProcessHandle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hdlTokenHandle);

   LookupPrivilegeValue(NULL, "SeShutdownPrivilege", &tmpLuid);

   tkp.PrivilegeCount            = 1;
   tkp.Privileges[0].Luid        = tmpLuid;
   tkp.Privileges[0].Attributes  = SE_PRIVILEGE_ENABLED;

   AdjustTokenPrivileges(hdlTokenHandle, FALSE, &tkp, sizeof(tkpNewButIgnored), &tkpNewButIgnored, &lBufferNeeded);
}

HB_FUNC( EXITWINDOWSEX )

{
   hb_retl( ExitWindowsEx( (UINT) hb_parni( 1 ), (DWORD) hb_parnl( 2 ) ) );
}

HB_FUNC( LOADTRAYICON )
{
	HICON himage;
	HINSTANCE hInstance  = (HINSTANCE) hb_parnl(1);  // handle to application instance
	LPCTSTR   lpIconName = (LPCTSTR)   hb_parc(2);   // name string or resource identifier

	himage = (HICON) LoadImage( hInstance ,  lpIconName , IMAGE_ICON, 16, 16, LR_SHARED ) ;

	if (himage==NULL)
	{
		himage = (HICON) LoadImage( hInstance , lpIconName , IMAGE_ICON, 0, 0, LR_LOADFROMFILE + LR_DEFAULTSIZE ) ;
	}

	hb_retnl ( (LONG) himage );
}

HB_FUNC( LOADMAINICON )
{
	HICON himage;
	HINSTANCE hInstance  = (HINSTANCE) hb_parnl(1);  // handle to application instance
	LPCTSTR   lpIconName = (LPCTSTR)   hb_parc(2);   // name string or resource identifier

	himage = (HICON) LoadImage( hInstance , lpIconName , IMAGE_ICON, 0, 0, LR_DEFAULTSIZE ) ;

	if (himage==NULL)
	{
		himage = (HICON) LoadImage( hInstance , lpIconName , IMAGE_ICON, 0, 0, LR_LOADFROMFILE + LR_DEFAULTSIZE ) ;
	}

	hb_retnl ( (LONG) himage );
} 

static HWND GetStartButton(void);


static void ShowNotifyInfo(HWND hWnd, BOOL bAdd, HICON hIcon, LPSTR szText, LPSTR szInfo, LPSTR szInfoTitle);

HB_FUNC ( SHOWNOTIFYINFO )
{
	ShowNotifyInfo( (HWND) hb_parnl(1), (BOOL) hb_parl(2), (HICON) hb_parnl(3), (LPSTR) hb_parc(4), 
			(LPSTR) hb_parc(5), (LPSTR) hb_parc(6) );
}

static void ShowNotifyInfo(HWND hWnd, BOOL bAdd, HICON hIcon, LPSTR szText, LPSTR szInfo, LPSTR szInfoTitle)
{
	NOTIFYICONDATA nid;

	ZeroMemory( &nid, sizeof(nid) );

	nid.cbSize		= sizeof(NOTIFYICONDATA);
	nid.hIcon		= hIcon;
	nid.hWnd		= hWnd;
	nid.uID			= 0;
	nid.uFlags		= NIF_INFO | NIF_TIP | NIF_ICON;
	nid.dwInfoFlags		= NIIF_INFO;

	lstrcpy( nid.szTip, TEXT(szText) );
	lstrcpy( nid.szInfo, TEXT(szInfo) );
	lstrcpy( nid.szInfoTitle, TEXT(szInfoTitle) );

	if(bAdd)
		Shell_NotifyIcon( NIM_ADD, &nid );
	else
		Shell_NotifyIcon( NIM_DELETE, &nid );

	if(hIcon)
		DestroyIcon( hIcon );
} 

HB_FUNC ( SETSTARTBUTTONIMAGE )
{
	HWND hButton = GetStartButton();
	HDC  hDCButton = GetDC(hButton);
	HDC  hDcCompatibleButton;
	RECT rc;
	int  nWidth, nHeight;

	HBITMAP hBitmap, hBitmapOld;
	BITMAP bitmap;

	GetWindowRect(hButton, &rc);
	nWidth = rc.right - rc.left;
	nHeight = rc.bottom - rc.top;

	hDcCompatibleButton = CreateCompatibleDC(hDCButton);

	hBitmap = (HBITMAP)LoadImage (NULL, hb_parc(1), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

	hBitmapOld = (HBITMAP)SelectObject(hDcCompatibleButton, hBitmap);
	GetObject(hBitmap, sizeof(BITMAP), &bitmap);

	if (nWidth > bitmap.bmWidth - 3 && nWidth < bitmap.bmWidth + 3 && nHeight > bitmap.bmHeight - 3 && nHeight < bitmap.bmHeight + 3)
		BitBlt(hDCButton, 0, 0, nWidth, nHeight, hDcCompatibleButton, 0, 0, SRCCOPY);
	else
		StretchBlt(hDCButton, 0, 0, nWidth, nHeight, hDcCompatibleButton, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);

	SelectObject(hDcCompatibleButton, hBitmapOld);

	DeleteDC(hDcCompatibleButton);
	DeleteDC(hDCButton);
	DeleteObject(hBitmap);
} 

static HWND GetStartButton()
{
	static HWND hKnownButton=0;
	HWND hTaskBar, hButton;

	hTaskBar = FindWindow( "Shell_TrayWnd", NULL );
	hButton = GetWindow( hTaskBar, GW_CHILD );

	if (hButton)
		hKnownButton = hButton;
	else
		hButton = hKnownButton;

	return hButton;
}

HB_FUNC( GETKEYBOARDMODE )
{
	HKL kbl;
	HWND CurApp;
	DWORD idthd;
	int newmode;

	CurApp=GetForegroundWindow();
	idthd=GetWindowThreadProcessId(CurApp,NULL);
	kbl=GetKeyboardLayout(idthd);
	newmode=(int)LOWORD(kbl);
	hb_retnl(newmode);
}

#pragma ENDDUMP 
►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)
clipsis
Usuário Nível 2
Usuário Nível 2
Mensagens: 79
Registrado em: 02 Jun 2010 11:53
Localização: brasil

Re: Usar Servidor de DNS no NETIO

Mensagem por clipsis »

Olá, ASimoes! Obrigado pelo resposta.

Mas acho que vc não entendeu. Acontece que quando vou compilar minha aplicação cliente, está dando erro ainda na compilação.

Apresenta a mensagem: undefined reference to `HB_FUN_NETIO_FUNCEXEC'
Como se não estivesse achando a rotina
Clipper 5.2/Blinker
Harbour 3.0/Mingw
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Usar Servidor de DNS no NETIO

Mensagem por asimoes »

Olá,

Você tem que incluir a lib hbnetio

[]´s
►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)
roberto-ctba
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 09 Jul 2005 13:32

Usar Servidor de DNS no NETIO

Mensagem por roberto-ctba »

bom dia.

Estou testando a hbnetio.
Gostaria de saber o que preciso para deixar em execução no servidor para que eu conecte via remoto na base de dados.

Caso os colegas tiverem um passo-a-passo, sobre esse recurso, portas aberta no servidor, router agradeceria muito.
grato pela atenção.

Roberto
Harbour 3.0 Minigui Extended atual.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Usar Servidor de DNS no NETIO

Mensagem por rochinha »

Amiguinhos,

Voces conseguiram alguma coisa.

Gsotariam de compartilhar. Estou na peleja e não obtive êxito ao testar hbNetIO.

Para colocar as bases em modo servidor bastará ativar o DBF Server Lights e jogar as tabelas na pasta interna DATA.


Ao testar com hbNetIO do Harbour 3.1 até revisão 17025 obtive corrupção dos data inutilizando a tabela.

Ao usar com hbNetIO do Harbour 3.1, revisão 17222 o programa trava logo na conecção e não segue em frente até que aconteça stop no DBF Server Lights.

Ao linkar apenas adicionei a hbNetIO.lib e não usei modo console.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Usar Servidor de DNS no NETIO

Mensagem por fladimir »

ASimoes escreveu:
"Resumindo, no letodb posso usar todas as funções que ele oferece usando ip local ou dns host,
no NetIO, somente com ip local, me corrijam se eu estiver errado, pelo menos fiquei tentando descobrir por horas e nada. Falta mais documentação sobre o uso desta lib."
Sobre isto Alexandre a conclusão q vc chegou é esta mesmo então?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar Servidor de DNS no NETIO

Mensagem por asimoes »

Fladimir,

Eu deixei o letodb de lado por conta daquele problema do indice, não sei se já foi resolvido, continuo usando hbnetio
►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)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Usar Servidor de DNS no NETIO

Mensagem por fladimir »

Obrigado, só queria criar um #command pro file() pq pra ver se tem o arquivo no servidor eu teria q trocar minhas chamadas pra colocar o net:// antes e se fizer um #command facilitaria, seria isso mesmo?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Usar Servidor de DNS no NETIO

Mensagem por Itamar M. Lins Jr. »

Ola!
Eu deixei o letodb de lado por conta daquele problema do indice, não sei se já foi resolvido,
Isso e muito mais coisas foram resolvidas usando o LetodbF(fork) do Elch.
Muito mais rápido o acesso e com todas as funções de arquivos funcionando e outras que não tem no Letodb...
O Letodbf roda 2(dois) daemons simultaneamente no servidor deixando a conexão ainda mais rápida... só alegria.
Mas para quem ainda está no xHarbour isso não funciona, melhor ir de NetIO mesmo.
'Under the hood' works now a *TWO-socket* TCP connection ( if client application is MultiThread compiled ),
enabling e,g, much faster data writes to the server.
Available is on demand an extreme fast LZ4 compress- and Blowfish-encrypt-able network traffic.
LetoDBf client lib ( used by your application ) became fully MultiThread save, each thread opens its own
connection to the server. Threads, threads threads .., wherever you look.

Código: Selecionar todos

    + compression for LetoFileWrite() and LetoMemoWrite()
    % increase max receive block size: 0x7FFFFFFF aka 2GB - 32MB
    ; may test such big blocks handles
4.2.4 Compression LZ4 / ZLib

Default is to use highspeed realtime LZ4 compression algorithm, but stoneage BCC 5.5 compiler cannot use it !
This can be changed to classic ( slower! ) ZLib compression by outcommenting with set a < # > into first position
of the corresponding .hbp files, found at very top the line with: "#-env:__LZ4=yes"
I would very recommend lightning fast LZ4.
Re-compile both!! server executable and client library. This must fit together, a server with LZ4 won't understand
a client application with ZLib.

Additional remark: at least stoneage old BCC 5.5 had problems with using LZ4, so it is outcommented for all BCC
versions. If you want to try it with a newer BCC version you have to remove that: "{!bcc}" in the HBP files.
Essas aqui, nem tive tempo de colocar em produção/testar.

Código: Selecionar todos

     Leto_FCopyToSrv( cLocalFileName, sServerFileName[, nStepSize ] )
                                                               ==> lSuccess
      Leto_FCopyFromSrv( cLocalFileName, sServerFileName[, nStepSize ] )
                                                               ==> lSuccess
 Copy a file from/ to client to/ from server, where:
 <cLocalFileName> is filename at client side,
 <sServerFileName> is filename at server which can contain connection info "//IP:port/".
 Optional <nStepSize> determine the size of bytes to be copied with one step, default if
 not given is 1 MB.
 <sServerFileName> can only contain prefix: "mem:" for files in RAM,
 <cLocalFileName> can contain any redirector prefix known by Harbour.
 A simple backup:
    aArr := Leto_Directory( "*" )
    AEval( aArr, { |aItem| Leto_FCopyFromSrv( aItem[1], aItem[1] } )
 Copy from a logged into HbNetIO server a file to LeoDBf located in RAM:
    Leto_FCopyToSrv( "net:hbnetio.txt", "mem:RAMfile.txt" )
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar Servidor de DNS no NETIO

Mensagem por JoséQuintas »

Amiguinhos,
Voces conseguiram alguma coisa.
Gsotariam de compartilhar. Estou na peleja e não obtive êxito ao testar hbNetIO.
Para colocar as bases em modo servidor bastará ativar o DBF Server Lights e jogar as tabelas na pasta interna DATA.
Ao testar com hbNetIO do Harbour 3.1 até revisão 17025 obtive corrupção dos data inutilizando a tabela.
Ao usar com hbNetIO do Harbour 3.1, revisão 17222 o programa trava logo na conecção e não segue em frente até que aconteça stop no DBF Server Lights.
Ao linkar apenas adicionei a hbNetIO.lib e não usei modo console.
Não entendi direito. inventaram um hbnetio só pra minigui?

O servidor hbnetio do Harbour vém pronto.

Cheguei a usar através de no-ip, mas só pra teste, e funcionou.

Aonde estou usando, instalei há alguns anos, nem lembro mais sobre a configuração... rs
Mas com certeza, Harbouir 3.4.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder