ejherran

stad_server.go

Oct 30th, 2013
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 3.29 KB | None | 0 0
  1. /* ------------------------------------------------- *
  2.  * +++++++++++++++++++++++++++++++++++++++++++++++++ *
  3.  * +++       Servidor ECHO Continuo              +++ *
  4.  * +++++++++++++++++++++++++++++++++++++++++++++++++ *
  5.  * Compilar con: $ go buil stad_server.go            *
  6.  * Ejcutar con: $ go run stad_server.go              *
  7.  * ------------------------------------------------- */
  8.  
  9. package main                                                // Paquete principal, le indica a go que este archivo contiene un punto de ejecucion
  10.  
  11. import (                                                    // Importar paquetes
  12.     "fmt"                                                   // Libreria estandar
  13.     "net/http"                                              // Servicios de protocolo http
  14.     "code.google.com/p/go.net/websocket"                    // Servicios de websocket
  15. )
  16.  
  17. func EchoServer(ws *websocket.Conn) {                       // Funcion basica de servidor ECHO
  18.    
  19.     for {
  20.        
  21.         m := make([]byte, 512)                              // Crea un arreglo de 512 bytes para recibir el mensaje del cliente
  22.        
  23.         n, err := ws.Read(m)                                // Lee el mensaje, la cantidad de bytes leidos (n) y captura un error (err) si se presenta
  24.        
  25.         if err == nil {                                     // Si no hay error
  26.            
  27.             sm := string(m[:n])                             // Convierte el mensaje a tipo string de tamaño exacto
  28.        
  29.             if sm != "$exit" {                              // Si el mensaje es diferente a la orden de salir ($exit)
  30.                
  31.                 fmt.Printf("Received: %s.\n", sm)           // Imprime el mensaje recibido
  32.                 b := []byte("Reply: "+sm)                   // Crea un arreglo de bytes a partir del mensaje de respuesta
  33.                 ws.Write(b)                                 // Escribe el mensaje de respuesta
  34.            
  35.             }  else {
  36.                
  37.                 fmt.Printf("Time of exit!\n")                // Imprime el mensaje de salida
  38.                 b := []byte("Reply: Time of exit!")         // Crea un arreglo de bytes a partir del mensaje de salida
  39.                 ws.Write(b)                                 // Escribe el mensaje de salida
  40.                
  41.                 break                                       // Termina la ejecucion del ciclo principal
  42.                
  43.             }
  44.         }
  45.     }
  46.    
  47. }
  48.  
  49. func WebSocketHandler() {                                   // Servidor elemental WebSocket
  50.    
  51.     http.Handle("/echo", websocket.Handler(EchoServer))     // Define la ruta (/echo) a gestionar y la funcion (EchoServer) que atendera las peticiones          
  52.     err := http.ListenAndServe(":1234", nil)                // Inicia el servidor en el puerto 1234 y captura un error si se presenta
  53.    
  54.     if err != nil {                                         // Si se presenta un error
  55.         panic("ListenAndServe: " + err.Error())             // Envia el error al sistema de panico, similar al sistema de logs
  56.     }
  57.    
  58. }
  59.  
  60. func main(){                                                // Punto de ejecución, funcion principal
  61.     WebSocketHandler()                                      // Inicia el servidor WebSocket
  62. }
Advertisement
Add Comment
Please, Sign In to add comment