ing
This commit is contained in:
parent
0fc50612a4
commit
d11b0afd2b
|
@ -2,14 +2,18 @@ package server
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"git.loafle.net/commons_go/logging"
|
||||
"git.loafle.net/commons_go/server"
|
||||
)
|
||||
|
||||
func NewServerHandler(addr string, serverName string, socketHandler SocketHandler) ServerHandler {
|
||||
func NewServerHandler(pidPath string, serverName string, socketHandler SocketHandler) ServerHandler {
|
||||
sh := &ServerHandlers{
|
||||
addr: addr,
|
||||
pidPath: pidPath,
|
||||
}
|
||||
|
||||
sh.Name = serverName
|
||||
|
@ -20,7 +24,8 @@ func NewServerHandler(addr string, serverName string, socketHandler SocketHandle
|
|||
type ServerHandlers struct {
|
||||
server.ServerHandlers
|
||||
|
||||
addr string
|
||||
pidPath string
|
||||
port int
|
||||
}
|
||||
|
||||
func (sh *ServerHandlers) Init(serverCTX server.ServerContext) error {
|
||||
|
@ -31,12 +36,28 @@ func (sh *ServerHandlers) Init(serverCTX server.ServerContext) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (sh *ServerHandlers) Listen(serverCTX server.ServerContext) (net.Listener, error) {
|
||||
for i := 60000; i < 61000; i++ {
|
||||
addr := fmt.Sprintf("localhost:%d", i)
|
||||
l, err := net.Listen("tcp", addr)
|
||||
if nil == err {
|
||||
sh.port = i
|
||||
return l, nil
|
||||
}
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("Container: Cannot find availrable port")
|
||||
}
|
||||
|
||||
func (sh *ServerHandlers) OnStart(serverCTX server.ServerContext) {
|
||||
sh.ServerHandlers.OnStart(serverCTX)
|
||||
|
||||
s := strconv.FormatInt(int64(sh.port), 10)
|
||||
ioutil.WriteFile(sh.pidPath, []byte(s), os.ModePerm)
|
||||
}
|
||||
|
||||
func (sh *ServerHandlers) OnStop(serverCTX server.ServerContext) {
|
||||
os.Remove(sh.pidPath)
|
||||
|
||||
sh.ServerHandlers.OnStop(serverCTX)
|
||||
}
|
||||
|
@ -44,8 +65,8 @@ func (sh *ServerHandlers) OnStop(serverCTX server.ServerContext) {
|
|||
func (sh *ServerHandlers) Validate() {
|
||||
sh.ServerHandlers.Validate()
|
||||
|
||||
if "" == sh.addr {
|
||||
logging.Logger().Panic(fmt.Sprintf("Server: Address of server must be specified"))
|
||||
if "" == sh.pidPath {
|
||||
logging.Logger().Panic(fmt.Sprintf("Server: The path of pid file must be specified"))
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"net"
|
||||
"os"
|
||||
|
||||
"git.loafle.net/commons_go/server"
|
||||
)
|
||||
|
||||
func (sh *ServerHandlers) Listen(serverCTX server.ServerContext) (net.Listener, error) {
|
||||
os.Remove(sh.addr)
|
||||
l, err := net.ListenUnix("unix", &net.UnixAddr{Name: sh.addr, Net: "unix"})
|
||||
if nil == err {
|
||||
os.Chmod(sh.addr, 0777)
|
||||
}
|
||||
return l, err
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"net"
|
||||
|
||||
"git.loafle.net/commons_go/server"
|
||||
npipe "gopkg.in/natefinch/npipe.v2"
|
||||
)
|
||||
|
||||
func (sh *ServerHandlers) Listen(serverCTX server.ServerContext) (net.Listener, error) {
|
||||
ln, err := npipe.Listen(`\\.\pipe\` + sh.addr)
|
||||
if err != nil {
|
||||
// handle error
|
||||
}
|
||||
return ln, err
|
||||
}
|
Loading…
Reference in New Issue
Block a user