Clipper On Line • Ver Tópico - LetoDb e Harbour, como usar.

LetoDb e Harbour, como usar.

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

LetoDb e Harbour, como usar.

Mensagempor bwr2018 » 21 Nov 2018 12:46

Olá Jairo, a função exit procedure existe sim, e já esta com o leto_disconnect(). Mas a sua segunda opção é uma boa. Não tinha me atentado para isso. Vou implementar e testar. Mais um detalhe que deixei escapar. Esse banco não uso nenhum tipo de index nele, não vi a necessidade disso pois se trata de um banco com apenas um registro. Varios campos para ser exato 12 campos onde eu os incremento. Será que é por isso? Eu devo criar o index?
bwr2018
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 20
Data de registro: 07 Nov 2018 15:24
Cidade/Estado: São Paulo
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

LetoDb e Harbour, como usar.

Mensagempor Jairo Maia » 22 Nov 2018 07:31

bwr2018 escreveu:Esse banco não uso nenhum tipo de index nele, [...]. Será que é por isso?
Creio que não. Mas como você está em fase de testes, seria interessante se você indexasse esse arquivo e repetisse os testes, e reportasse aqui. Reporte também se funcionou ou não o comando HardCommit,assim ficaria para registro a outros que venham ter esse problema.

NOTA: lembrando que só é recomendado usar HardCommit se houver instabilidade do servidor, ou em outras palavras, se houver demora para gravar os dados em disco.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

LetoDb e Harbour, como usar.

Mensagempor bwr2018 » 22 Nov 2018 12:46

Perfeito Jairo, vou fazer esses testes no sábado e retorno aqui. Muito obrigado por enquanto!
bwr2018
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 20
Data de registro: 07 Nov 2018 15:24
Cidade/Estado: São Paulo
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

LetoDb e Harbour, como usar.

Mensagempor bwr2018 » 23 Nov 2018 18:00

Bem, disse no sábado mas a ansiedade não me deixou rsrs. Primeiro que fiz o que o colega Jairo falou mudei HardCommit = 0, para 1. O problema ainda persiste. Vou postar aqui o código completo dos testes que estou fazendo, para os amigos que se interessarem em ajudar. Lembrando que a forma que vou postar é a forma que fiz funcionar. Abrindo e fechando o banco. Mas creio que não seja a mais correta. Bom esse é um problema contornado em partes. Agora surgiu outro, que é quando cai a conexão do servidor. No caso simulei aqui somente removi o cabo da rede, o programa que rodava na estação travou e eu não consegui fazer mais nada. Somente após conectar o cabo novamente ele conseguiu restabelecer a conexão. E então o programa ficou disponível novamente. Ainda nesse teste o servidor continuou operando normal mesmo sem estar conectado a rede. Segue o codigo.

Programa
#define FILE_LOCAL  "/home/bruno/server/banco.dbf"
#define FILE_LETODB "/usr/local/bin/letodb"
#define FILE_SERVER "banco.dbf"
#define NETSERVER   "192.168.0.1"
#define NETPORT     "2812"

request RDDLETO
memvar getlist

field INCSERV1
field INCSERV2
field INCSERV3
field INCSERV4
field INCSERV5
field INCSERV6
field INCSERV7
field INCLOCAL1
field INCLOCAL2
field INCLOCAL3
field INCLOCAL4
field INCLOCAL5
field INCLOCAL6
field INCLOCAL7

procedure main(param1)
local secs,tk
set date british
set date format "dd/mm/yyyy"
set century on

init_database()

if ( empty( param1 ) )
   cls
   ? "./browse 0 - para iniciar como servidora"
   ? "./browse 1 - para iniciar como estacao"
   quit
endif
if ( param1 == '0' )
   init_service_leto()
endif

if leto_Connect( "//"+NETSERVER+":"+NETPORT+"/" ) == -1
   alert("Sem conexao")
   clear all
   close all
   quit
endif

cls
secs := abs(seconds())
do while .t.

   tk := inkey(0.1)

   if tk == 27
      quit
   endif

   if tk == 13

      dbselectarea("W")

      dbxput( "INCLOCAL1", INCLOCAL1 + 1 )
      dbxput( "INCLOCAL2", INCLOCAL2 + 1 )
      dbxput( "INCLOCAL3", INCLOCAL3 + 1 )
      dbxput( "INCLOCAL4", INCLOCAL4 + 1 )
      dbxput( "INCLOCAL5", INCLOCAL5 + 1 )
      dbxput( "INCLOCAL6", INCLOCAL6 + 1 )
      dbxput( "INCLOCAL7", INCLOCAL7 + 1 )
     
      USE FILE_SERVER SHARED NEW ALIAS LAN
      if neterr() .or. empty( alias() )
         alert("Erro ao abrir banco de dados")
      else
         dbselectarea("LAN")
      endif

      dbxput_server( "INCSERV1", INCSERV1 + 1 )
      dbxput_server( "INCSERV2", INCSERV2 + 1 )
      dbxput_server( "INCSERV3", INCSERV3 + 1 )
      dbxput_server( "INCSERV4", INCSERV4 + 1 )
      dbxput_server( "INCSERV5", INCSERV5 + 1 )
      dbxput_server( "INCSERV6", INCSERV6 + 1 )
      dbxput_server( "INCSERV7", INCSERV7 + 1 )

      update_dbf()

      LAN->( dbclosearea() )

   endif

   if abs( seconds() - secs ) > 0.3

      dbselectarea("W")     

      @ 0,43 say "BANCO LOCAL"
      @ 2,41 say "INCREMENTO 1: "+alltrim(str(INCLOCAL1))
      @ 3,41 say "INCREMENTO 2: "+alltrim(str(INCLOCAL2))
      @ 4,41 say "INCREMENTO 3: "+alltrim(str(INCLOCAL3))
      @ 5,41 say "INCREMENTO 4: "+alltrim(str(INCLOCAL4))
      @ 6,41 say "INCREMENTO 5: "+alltrim(str(INCLOCAL5))
      @ 7,41 say "INCREMENTO 6: "+alltrim(str(INCLOCAL6))
      @ 8,41 say "INCREMENTO 7: "+alltrim(str(INCLOCAL7))
     
      USE FILE_SERVER SHARED NEW ALIAS LAN
      if neterr() .or. empty( alias() )
         alert("Erro ao abrir banco de dados")
      else
         dbselectarea("LAN")
      endif

      @ 0,3 say "BANCO SERVIDOR"
      @ 2,1 say "INCREMENTO 1: "+alltrim(str(INCSERV1))
      @ 3,1 say "INCREMENTO 2: "+alltrim(str(INCSERV2))
      @ 4,1 say "INCREMENTO 3: "+alltrim(str(INCSERV3))
      @ 5,1 say "INCREMENTO 4: "+alltrim(str(INCSERV4))
      @ 6,1 say "INCREMENTO 5: "+alltrim(str(INCSERV5))
      @ 7,1 say "INCREMENTO 6: "+alltrim(str(INCSERV6))
      @ 8,1 say "INCREMENTO 7: "+alltrim(str(INCSERV7))

      LAN->( dbclosearea() )

      secs := abs( seconds() )
   endif

enddo
leto_disconnect()
quit

procedure init_service_leto
cls
? "Iniciando letodb..."
hb_run(FILE_LETODB)
? "Letodb iniciado...."
inkey(3)
return

procedure init_database
local cDbf_File := "banco.dbf"
if file(cDbf_File)
   dbusearea(.t., NIL, cDbf_File, "W", NIL, .f.)
else
   cls
   alert(cDbf_File+" nao encontrada!")
   quit
endif
return

procedure dbxput(local1,local2)
field->&local1 := local2
return

procedure dbxput_server(cField, xValor)
do while .t.
   if ( LAN->( dbrlock() ) )
      field->&cField := xValor
      LAN->( dbunlock() )
      exit
   else
      alert("Sem conexao")
      exit
   endif
enddo
return

procedure update_dbf
dbcommitall()
return


Make para compilação
-obrowse
-w3
-es2

-lrddleto

browse.prg


Banco
//REQUEST DBFCDX
memvar getlist

procedure main
local aDbf := {}
set date british
set date format "dd/mm/yyyy"
setcancel(.f.)
set century on

aadd(aDbf,{"INCSERV1"   , "N",  12,  4})
aadd(aDbf,{"INCSERV2"   , "N",  12,  4})
aadd(aDbf,{"INCSERV3"   , "N",  12,  4})
aadd(aDbf,{"INCSERV4"   , "N",  12,  4})
aadd(aDbf,{"INCSERV5"   , "N",  12,  4})
aadd(aDbf,{"INCSERV6"   , "N",  12,  4})
aadd(aDbf,{"INCSERV7"   , "N",  12,  4})
ferase("base.dbf")             
//dbCreate( "base.dbf", aDbf, "DBFCDX", .T., "W" )
DbCreate("base.dbf", aDbf,,.t.,"W")
W->(dbAppend())
W->INCSERV1 := 0
W->INCSERV2 := 0
W->INCSERV3 := 0
W->INCSERV4 := 0
W->INCSERV5 := 0
W->INCSERV6 := 0
W->INCSERV7 := 0
commit
clear all
close all
quit


Bom pessoal é isso, o caso de não atualizar se não tiver solução tudo bem. Agora esse caso do travamento caso a conexão com o servidor seja perdida isso é bem ruim acaba inviabilizando o uso da ferramenta. Será que existe algum tratamento para isso alguma maneira de esta sempre verificando se a conexão ainda esta ativa? Fico no aguardo muito obrigado por enquanto.
bwr2018
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 20
Data de registro: 07 Nov 2018 15:24
Cidade/Estado: São Paulo
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

LetoDb e Harbour, como usar.

Mensagempor asimoes » 23 Nov 2018 19:48

Olá eu trocaria:

leto_Connect( "//"+NETSERVER+":"+NETPORT+"/" )

Por

leto_Connect( "//"+NETSERVER+":"+NETPORT+"/", , , -1 )
â–º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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDb e Harbour, como usar.

Mensagempor bwr2018 » 24 Nov 2018 09:47

Olá, e qual é a diferença amigo?
bwr2018
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 20
Data de registro: 07 Nov 2018 15:24
Cidade/Estado: São Paulo
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

LetoDb e Harbour, como usar.

Mensagempor asimoes » 24 Nov 2018 11:02

bwr2018 escreveu:Olá, e qual é a diferença amigo?


Olá,

Eu tinha alguns problemas com acesso a tabelas, modifiquei o parâmetro de timeout para -1 e nunca mais tive problemas.

Agora as respostas para as suas perguntas estão no arquivo ChangeLog.txt pra saber das correções/novidades e no readme.txt que é o manual.

Outra coisa importante mantenha sempre atualizada a versão do letodbf, eu faço assim antes de atualizar faço uma cópia da versão em uso (backup) qq comportamento fora do normal uso a versão anterior.
â–º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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDb e Harbour, como usar.

Mensagempor Itamar M. Lins Jr. » 24 Nov 2018 22:44

Ola!
Agora esse caso do travamento caso a conexão com o servidor seja perdida isso é bem ruim acaba inviabilizando o uso da ferramenta.

E é para acontecer o quê neste caso ? Eu não estou entendendo.

      HardCommit = 0           -    if 0, SET HARDCOMMIT OFF, this is now DEFAULT.
                                    It is recommended for UNSTABLE running server to set it to <1>,
                                    which means that each change at data tables are immedeate written to
                                    harddrive bypassing the OS cache.
                                    Expect significant reduced performance with setting '1'.

Será que existe algum tratamento para isso alguma maneira de esta sempre verificando se a conexão ainda esta ativa?

No caso da pergunta acima, a resposta está no capitulo 7.1 do arquivo Readme.txt do LetoDbf.
Mas continuo sem entender nada. A Conexão tem ficar ativa o tempo TODO mesmo, se cair congela a aplicação! Não é assim com qualquer programa ?
Qual é o programa que "em usando" a rede e a conexão cair, continua funcionando ?
      LETO_DETECT( [ cService ],[ nNrOfPossible ],[ nPort ] )  ==> cServerIP
This functions sends a broadcast into the local network, to all available interfaces,
(virtual) interfaces loopback (lo) and other without MAC address are excluded from that.
Default <cService> is "letodb", and this is correlating to the server side:
see in example letodb.ini for config option: BC_Services = letodb;
Such configured LetoDBf server then will respond to this query with its IP/Port,
where <cServerIP> is in the format: "//9.9.9.9:2812/" to be used i.e. to connect
to the server: Leto_Connect( Leto_Detect() ),
With <nNrOfPossible> can be selected between multiple server responding to same service name.
Alternative to new build-in at server was before a standalone exe: 8.2. 'Uhura'


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDb e Harbour, como usar.

Mensagempor Itamar M. Lins Jr. » 24 Nov 2018 22:46

Ola!
Uhura é uma homenagem ao personagem de Jornada Nas Estrelas.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

LetoDb e Harbour, como usar.

Mensagempor Jairo Maia » 24 Nov 2018 23:21

bwr2018 escreveu: Agora esse caso do travamento caso a conexão com o servidor seja perdida isso é bem ruim acaba inviabilizando o uso da ferramenta. Será que existe algum tratamento para isso alguma maneira de esta sempre verificando se a conexão ainda esta ativa?
Para verificar se a conexão está ativa basta usar a dica do Itamar acima, já para evitar o "travamento", basta NÃO usar TimeOut = -1.

Assim, quando perder a conexão com o servidor o comportamento será como qualquer outro sistema, como sua internet por exemplo, ou seja, "morre tudo".

TimeOut = -1 - Connection timeout in seconds, -1 means infinite wait.
This timeout determine, how long a write to network/ wait for requested workarea
will wait to succeed, before the thread for the connection give up.
If used: Zombie_Check, this value shell be shorter than that.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

LetoDb e Harbour, como usar.

Mensagempor asimoes » 25 Nov 2018 10:59

Por acaso trabalha com plugin de banco ? gaspro ou outro ?, antivirus também interfere, isso acontece em mais de uma estação ?
â–º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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

LetoDb e Harbour, como usar.

Mensagempor bwr2018 » 26 Nov 2018 11:17

Itamar M. Lins Jr. escreveu:Ola!
Agora esse caso do travamento caso a conexão com o servidor seja perdida isso é bem ruim acaba inviabilizando o uso da ferramenta.

E é para acontecer o quê neste caso ? Eu não estou entendendo.

      HardCommit = 0           -    if 0, SET HARDCOMMIT OFF, this is now DEFAULT.
                                    It is recommended for UNSTABLE running server to set it to <1>,
                                    which means that each change at data tables are immedeate written to
                                    harddrive bypassing the OS cache.
                                    Expect significant reduced performance with setting '1'.

Será que existe algum tratamento para isso alguma maneira de esta sempre verificando se a conexão ainda esta ativa?

No caso da pergunta acima, a resposta está no capitulo 7.1 do arquivo Readme.txt do LetoDbf.
Mas continuo sem entender nada. A Conexão tem ficar ativa o tempo TODO mesmo, se cair congela a aplicação! Não é assim com qualquer programa ?
Qual é o programa que "em usando" a rede e a conexão cair, continua funcionando ?
      LETO_DETECT( [ cService ],[ nNrOfPossible ],[ nPort ] )  ==> cServerIP
This functions sends a broadcast into the local network, to all available interfaces,
(virtual) interfaces loopback (lo) and other without MAC address are excluded from that.
Default <cService> is "letodb", and this is correlating to the server side:
see in example letodb.ini for config option: BC_Services = letodb;
Such configured LetoDBf server then will respond to this query with its IP/Port,
where <cServerIP> is in the format: "//9.9.9.9:2812/" to be used i.e. to connect
to the server: Leto_Connect( Leto_Detect() ),
With <nNrOfPossible> can be selected between multiple server responding to same service name.
Alternative to new build-in at server was before a standalone exe: 8.2. 'Uhura'


Saudações,
Itamar M. Lins Jr.


E é para acontecer o quê neste caso ? Eu não estou entendendo.
R: Eu penso que eu tinha que ter pelo menos a chance de interceptar esse travamento.

A Conexão tem ficar ativa o tempo TODO mesmo, se cair congela a aplicação!
R: Não em entendi o seu "TODO"

Não é assim com qualquer programa ?
R: Não, ou pelo menos algo que informe que a conexão caiu.

Qual é o programa que "em usando" a rede e a conexão cair, continua funcionando ?
R: Qualquer programa que façamos um tratamento para isso. Visto que eu tenho o mesmo banco no servidor o no local. Acho que o amigo não leu meu codigo ou passou despercebido. Pois eu faço o mesmo incremento no servidor e no local. Então se a conexão com o servidor cair eu sigo usando o banco local. Desde que eu tenha a CHANCE de perceber ou detectar que a conexão caiu.
bwr2018
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 20
Data de registro: 07 Nov 2018 15:24
Cidade/Estado: São Paulo
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

LetoDb e Harbour, como usar.

Mensagempor bwr2018 » 26 Nov 2018 11:22

Jairo Maia escreveu:
bwr2018 escreveu: Agora esse caso do travamento caso a conexão com o servidor seja perdida isso é bem ruim acaba inviabilizando o uso da ferramenta. Será que existe algum tratamento para isso alguma maneira de esta sempre verificando se a conexão ainda esta ativa?
Para verificar se a conexão está ativa basta usar a dica do Itamar acima, já para evitar o "travamento", basta NÃO usar TimeOut = -1.

Assim, quando perder a conexão com o servidor o comportamento será como qualquer outro sistema, como sua internet por exemplo, ou seja, "morre tudo".

TimeOut = -1 - Connection timeout in seconds, -1 means infinite wait.
This timeout determine, how long a write to network/ wait for requested workarea
will wait to succeed, before the thread for the connection give up.
If used: Zombie_Check, this value shell be shorter than that.


Olá Jairo, vou verificar o TimeOut, confesso editei muito pouco o meu letodb.ini e tbm meu conhecimento em rede é muito mas muito raso. Então agradeço demais toda ajuda de vcs.
bwr2018
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 20
Data de registro: 07 Nov 2018 15:24
Cidade/Estado: São Paulo
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

LetoDb e Harbour, como usar.

Mensagempor bwr2018 » 26 Nov 2018 11:26

asimoes escreveu:Por acaso trabalha com plugin de banco ? gaspro ou outro ?, antivirus também interfere, isso acontece em mais de uma estação ?


Ola asimoes, não cara estou em fase de testes ainda usando um distro linux slackware 13.1 até bem antiga mas sempre me dei bem com ela. Confesso que nem sei o que são esses plugins que vc citou. E sim, acontece em todas estações. Se eu desconectar o cabo da servidora todas outras congelam.
bwr2018
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 20
Data de registro: 07 Nov 2018 15:24
Cidade/Estado: São Paulo
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

LetoDb e Harbour, como usar.

Mensagempor bwr2018 » 26 Nov 2018 11:35

Segue como está meu letodb.ini, não mudei nada do original a não ser [Server], [Port] e [DataPath].

Server = 192.168.0.1
Port = 2812
DataPath = /home/bruno/server
;LogPath = /tmp
Default_Driver = CDX
;Lock_Scheme = 6
;Memo_Type = FPT
Share_Tables = 0
No_Save_WA = 1
Lower_Path = 0
EnableFileFunc = 1
EnableAnyExt = 1
Allow_UDF = 1
Pass_for_Login = 0
Pass_for_Manage = 0
Pass_for_Data = 0
;Pass_File = leto_users
Cache_Records = 21
;Max_Vars_Number = 1000
;Max_Var_Size = 67108864
;Tables_Max = 999
;Users_Max = 99
Debug = 1
Optimize = 1
;AutOrder = 0
;ForceOpt = 0
;TimeOut = 360
;Zombie_Check = 0
;Server_User = advantage
;Server_UID = 1000
;Server_GID = 4
;BC_Services = letodb;
;BC_Interface = eth2
;BC_Port = 2812
;SMB_SERVER = 1
DataBase = /
Backup = /tmp/backup
Mask = *.dbf,*.dbt,*.ntx
Lock = 1
Seconds = 30
Wait = 1
ArcCmd = tar -cvzf /tmp/backup/leto.tar.gz /tmp/backup/*
bwr2018
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 20
Data de registro: 07 Nov 2018 15:24
Cidade/Estado: São Paulo
Curtiu: 4 vezes
Mens.Curtidas: 0 vez

Anterior Próximo



Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Google [Bot] e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro