terça-feira, 12 de abril de 2016

Valente - Exemplo 1 - Count


Primeira postagem com um exemplo de uso do valente. Exemplo bem simples. A webapp criada  atualiza um contador a cada segundo no browser. Lembrando que fiz o valente quando estava codificando um painel(dashboard) para o iMedNow e toda comunicação e feita via websocket.

O compilador Go deve estar instalado, assim como o valente. Em algum diretório dentro do $GOPATH/src execute:

$ valente new count

O diretório count será criado com um projeto inicial.
.
├── forms
│   ├── home.go
│   └── login.go
├── main.go
└── public
    ├── index.html
    └── js
        ├── app.js
        └── jquery.blockUI.min.js

Iremos editar apenas o arquivo home.go:


package forms

import (
     "log"
     "strconv"
     "time"

     "github.com/trumae/valente"
     "github.com/trumae/valente/action"
     "golang.org/x/net/websocket"
)


const htmlFormHome = `
<h3> Home </h3>
<span id="count"> </span >
`


//FormHome example
type FormHome struct {
     valente.FormImpl
}

//Initialize inits the Home Form
func (form FormHome) Initialize(ws *websocket.Conn) valente.Form {
    log.Println("FormHome Initialize")

    action.HTML(ws, "content", htmlFormHome)

    go func() {
            i := 0
            c := time.Tick(1 * time.Second)
            for _ = range c {
                    i = i + 1
                    err := action.HTML(ws, "count", strconv.Itoa(i))
                    if err != nil {
                          log.Println("Error sending count ", err)
                          return
                    }
           }
    }()

    return form
}


As linhas pintadas de azul foram adicinadas ao arquivo inicial gerado automaticamente pelo valente. No início temos a declaração do pacote "strconv" que será utilizado para converter inteiro em string.
Depois temos a declaração do html que irá ser utilizado no desenho da página principal. Um span é declarado e será utilizado para exibir o número da contagem. Por último, uma corotina é disparada. Essa corotina atualiza, a cada segundo o conteúdo do elemento html "count".

Para executar o exemplo basta entrar no diretório "count" e executar:

$ go build
$ ./count

Boa diversão!