Bloqueio de registro em rede com linux

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Bloqueio de registro em rede com linux

Mensagem por Cavalo Marinho »

Bom dia amigos, ja algum tempo mudei todas as minhas aplicações de clipper para harbour modo console (ainda) e está rodando 100% em Windows, acontece que um cliente está sendo obrigado a trocar parte da plataforma dele para linux, um servidor linux e estações linux e algumas windows por motivo de força maior, instalei algumas estações linux e com o WINE estou rodando minha aplicação compilada para windows, roda certinho até eu descobrir que nao consigo bloquear registros para gravação, cenário mais comum: estou com os arquivos aberto e mando indexar a base de dados, faço um teste antes mas o teste retorna falso, e aí indexa os arquivos como se tivesse sido aberto em modo exclusivo (ISSO NO WINDOWS RODA PERFEITO). Alguém tem uma luz? :% :%
Desde já agradeço a atenção:
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Bloqueio de registro em rede com linux

Mensagem por Kapiaba »

Tente assim:

Código: Selecionar todos

Function Exemplo
   //
   // Exemplo de uso da função NET_REG
   if .not. Arquivo->(dbseek(chave))

      Arquivo->(dbappend())

      //...(seu código aqui) gerar chave, etc...

   endif

   if .not. net_reg()

      mensagem("Nao foi possivel incluir registro no arquivo",, 0)
      return false

   endif

   Replace Arquivo->campo1 with OutroArquivo->campo1,;
           Arquivo->campo2 with OutroArquivo->campo2

   Arquivo->(dbunlock())
   Arquivo->(dbcommit())

Return true

Function NET_REG(limite)

   local savtela
   local xvezes
   local msgaviso
   local windx
   local wcontador
   default limite to 0 // se limite > 0, aguarda N segundos e volta

   // se limite == 0 fica aguardando
   CLEAR TYPEAHEAD

   savtela := savescreen(0, 0, maxrow(), maxcol())
   savcolor := setcolor()
   xvezes := 0
   wcontador := 0

   msgaviso := "Aguardando para gravar registro no arquivo " + alltrim(alias(select()))

   do while true

      if Rlock() // Se conseguir bloquear o registro

         restscreen(0, 0, maxrow(), maxcol(), savtela)
         return true // Retornar...

      endif
      //
      if (xvezes < 6)

         xvezes++
         inkey(0.5)
         loop

      endif

      aguarde(msgaviso) \\ janela padrão de Aguarde

      mensagem(msgaviso) \\ rotina padrão de mensagem rodapé

      @ maxrow()-1,00 say padc(msgaviso + ". Tecle ESC para interromper")

      if inkey(0.5) = K_ESC // aguarda 0.5 segundo
         setcolor(savcolor)
         restscreen(0, 0, maxrow(), maxcol(), savtela)
         return false
      endif

      wContador++

      if limite > 0 .and. ; // se for informado limite
         wContador > limite // aguarda o tempo especificado
         restscreen(0, 0, maxrow(), maxcol(), savtela)
         return false // aviso de erro. Nao bloqueou
      endif
      //
   enddo

   restscreen(0, 0, maxrow(), maxcol(), savtela)

return(true)

Function mensagem(vMsg, vJust, vtempo, vLinha, vTom)

   // Apresenta mensagem padrao no rodape da tela ou na linha informada
   // Se for informado TEMPO, faz pausa pelo tempo especificado
   // Se for informado TOM, soa um sinal.
   local savcolor
   public cRealce := "W+/R,N/W,,,W+/R"
   default vMsg to ""
   default vJust to "E"
   default vTempo to nil
   default vLinha to maxrow()
   default vTom to false

   savcolor := setcolor()

   vJust := upper(vJust) // padroniza parametro

   if empty(vMsg)
      setcolor("GR+/B")
   else
      setcolor(m->cRealce)
   endif

   do case
   case vJust = "E"
      @ vLinha, 0 say padr(vMsg, maxcol()+1)
   case vJust = "C"
      @ vLinha, 0 say padc(vMsg, maxcol()+1)
   case vJust = "D"
      @ vLinha, 0 say padl(vMsg, maxcol()+1)
   endcase

   if vTom
      tone(440,1)
   endif

   if vTempo <> NIL
      inkey(vTempo)
   endif

   setcolor(savcolor)

return

Function Aguarde(mensagem, linha, cor)

   // Mostra mensagem hh:mm:ss aguarde...
   //
   local wcoli
   local wlinf
   local wcolf
   local tammsg := 0
   local savcolor
   public cRealce := "W+/R,N/W,,,W+/R"
   default linha to (maxrow()/2)-3
   default cor to m->cRealce

   savcolor := setcolor()
   setcolor(m->cRealce)

   mensagem := time() + " " + alltrim(mensagem)
   tammsg := (maxcol() - (len(alltrim(mensagem)))) / 2
   wlinf := linha + 3
   wcoli := tammsg - 2
   wcolf := (maxcol() - tammsg) + 1

   janela(linha, wcoli, wlinf, wcolf, mensagem,, false, cor)

   @ linha +2, wcoli+ 2 say mensagem
   setcolor(savcolor)

return(NIL)
==================================================================
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Bloqueio de registro em rede com linux

Mensagem por Cavalo Marinho »

Boa tarde Kapiaba
Eu já trabalho com rede a muito tempo, e é assim mesmo que faço, no windows funciona 100%, o meu problema é que com estações linux Ubuntu rodando com WINE o sistema nao respeita os bloqueios:
Ex.: em uma estacão windows ou linux eu bloqueio um registro, se uma outra estacão linux for testar se o registro está bloqueado ela simplesmente ignora o bloqueio feito pela primeira estacão, mais alem, se eu abrir em modo exclusivo na estacão 1 não deveria abrir o arquivo em qualquer outra estacão, faço os testes com neterr(), reforçando tudo funciona perfeito nas estações windows com servidor linux ou windows, mas ao abrir nas estacoes linux surge o problema.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Bloqueio de registro em rede com linux

Mensagem por Kapiaba »

Opa, eu acho que ai, é melhor você perguntar diretamente no forum de Linux:

https://www.vivaolinux.com.br/

Pode ser algum problema com seu Linux ou falta de alguma coisa do Linux. Por isso que eu adoro Windows. kkkkkk

Abs.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Bloqueio de registro em rede com linux

Mensagem por Jairo Maia »

Olá Pessoal,

Eu tenho um "pitaco" nessa questão. Não trabalho com Linux, mas apenas o seguinte:

Nas estações Windows, o executável é para Windows, e nas estações Linux para linux, é isso? Se sim, então um não reconhecerá mesmo quando um arquivo ou registro for bloqueado pelo outro.

Tenho em mente que cada um aloca essa informação e interage diferente. Apenas palpite...
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 do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Bloqueio de registro em rede com linux

Mensagem por Cavalo Marinho »

Boa tarde Jairo
Não é bem isso, nas estações linux também é o executável para windows trabalhando com o WINE responsável por rodar programas windows/dos dentro da plataforma linux, o programa roda certinho exceto pelos bloqueios de arquivos e registros em rede, não sei o que ocorre, sé é alguma coisa no samba já que usamos uma pasta compartilhada no servidor (Linux). agora estou em busca de um letodb ou netio para linux já que o servidor é linux, para realizar testes e ver como se comporta, se alguém tiver opinião sobre estes dois por favor se pronuncie.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Bloqueio de registro em rede com linux

Mensagem por Itamar M. Lins Jr. »

Ola!
Se não usa lib gráfica, melhor opção é usar tudo no Linux.
Nas máquinas com windows vc usa o SSH ou Telnet...
Mas se quer saber o que é, vc precisa ajustar o SAMBA e Wine as opções de Optismisc Looking... não sei se é assim que se escreve, faz tempo que não mexo no Linux... No LINUX não existe arquivo/registro exclusivo, tudo está em SHARED MODE!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder