mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
增加stop命令
This commit is contained in:
@@ -6,7 +6,9 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var mapRegisterCmd map[string]func(param interface{}) = map[string]func(param interface{}){}
|
type CommandFunctionCB func(param interface{})error
|
||||||
|
|
||||||
|
var mapRegisterCmd map[string]CommandFunctionCB = map[string]CommandFunctionCB{}
|
||||||
var programName string
|
var programName string
|
||||||
|
|
||||||
func Run(args []string) error {
|
func Run(args []string) error {
|
||||||
@@ -27,12 +29,14 @@ func Run(args []string) error {
|
|||||||
}else{
|
}else{
|
||||||
return start(fn,args[2])
|
return start(fn,args[2])
|
||||||
}
|
}
|
||||||
|
case "stop":
|
||||||
|
return fn(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Errorf("command not found, try `%s help` for help",args[0])
|
return fmt.Errorf("command not found, try `%s help` for help",args[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
func start(fn func(param interface{}),param string) error {
|
func start(fn CommandFunctionCB,param string) error {
|
||||||
sparam := strings.Split(param,"=")
|
sparam := strings.Split(param,"=")
|
||||||
if len(sparam) != 2 {
|
if len(sparam) != 2 {
|
||||||
return fmt.Errorf("invalid option %s",param)
|
return fmt.Errorf("invalid option %s",param)
|
||||||
@@ -45,10 +49,10 @@ func start(fn func(param interface{}),param string) error {
|
|||||||
return fmt.Errorf("invalid option %s",param)
|
return fmt.Errorf("invalid option %s",param)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn(nodeId)
|
return fn(nodeId)
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func RegisterCommand(cmd string,fn func(param interface{})){
|
|
||||||
|
func RegisterCommand(cmd string,fn CommandFunctionCB){
|
||||||
mapRegisterCmd[cmd] = fn
|
mapRegisterCmd[cmd] = fn
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,18 +6,6 @@
|
|||||||
"NodeName": "Node_Test1",
|
"NodeName": "Node_Test1",
|
||||||
"remark":"//以_打头的,表示只在本机进程,不对整个子网开发",
|
"remark":"//以_打头的,表示只在本机进程,不对整个子网开发",
|
||||||
"ServiceList": ["TestService1","TestService2","TestServiceCall","GateService","TcpService"]
|
"ServiceList": ["TestService1","TestService2","TestServiceCall","GateService","TcpService"]
|
||||||
},
|
|
||||||
{
|
|
||||||
"NodeId": 2,
|
|
||||||
"ListenAddr":"127.0.0.1:8002",
|
|
||||||
"NodeName": "Node_Gate2",
|
|
||||||
"ServiceList": ["SubNet1_Service"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"NodeId": 3,
|
|
||||||
"ListenAddr":"127.0.0.1:8003",
|
|
||||||
"NodeName": "Node_Room",
|
|
||||||
"ServiceList": ["SubNet1_Service"]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -128,12 +128,14 @@ func (slf *TestServiceCall) Test(){
|
|||||||
param.B = "xxxxxxxxxxxxxxxxxxxxxxx"
|
param.B = "xxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
param.Pa = []string{"ccccc","asfsdfsdaf","bbadfsdf","ewrwefasdf","safsadfka;fksd"}
|
param.Pa = []string{"ccccc","asfsdfsdaf","bbadfsdf","ewrwefasdf","safsadfka;fksd"}
|
||||||
param.Index = index
|
param.Index = index
|
||||||
slf.AsyncCall("TestService1.RPC_Test",¶m, func(reply *Param, err error) {
|
slf.AsyncCall("TestService1.RPC_Test1",¶m, func(reply *Param, err error) {
|
||||||
fmt.Print(reply,"\n")
|
fmt.Print(reply,"\n")
|
||||||
})
|
})
|
||||||
slf.AfterFunc(time.Second*1,slf.Test)
|
slf.AfterFunc(time.Second*1,slf.Test)
|
||||||
}
|
}
|
||||||
|
func (slf *TestServiceCall) OnRelease(){
|
||||||
|
fmt.Print("OnRelease")
|
||||||
|
}
|
||||||
func (slf *TestServiceCall) Run(){
|
func (slf *TestServiceCall) Run(){
|
||||||
//var ret int
|
//var ret int
|
||||||
var input int = 1
|
var input int = 1
|
||||||
@@ -163,7 +165,9 @@ func (slf *TestServiceCall) Run(){
|
|||||||
|
|
||||||
func (slf *TestService1) RPC_Test(a *Param,b *Param) error {
|
func (slf *TestService1) RPC_Test(a *Param,b *Param) error {
|
||||||
//*a = *b
|
//*a = *b
|
||||||
|
//a = nil
|
||||||
*b = *a
|
*b = *a
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
24
node/node.go
24
node/node.go
@@ -12,7 +12,6 @@ import (
|
|||||||
"os/signal"
|
"os/signal"
|
||||||
"strconv"
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var closeSig chan bool
|
var closeSig chan bool
|
||||||
@@ -97,27 +96,34 @@ func Start() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func stopNode(processid interface{}){
|
func stopNode(arg interface{}) error {
|
||||||
|
processid,err := getRunProcessPid()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func startNode(paramNodeId interface{}) {
|
KillProcess(processid)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func startNode(paramNodeId interface{}) error {
|
||||||
initNode(paramNodeId.(int))
|
initNode(paramNodeId.(int))
|
||||||
cluster.GetCluster().Start()
|
cluster.GetCluster().Start()
|
||||||
service.Start()
|
service.Start()
|
||||||
writeProcessPid()
|
writeProcessPid()
|
||||||
for {
|
bRun := true
|
||||||
|
|
||||||
|
for bRun {
|
||||||
select {
|
select {
|
||||||
case <-sigs:
|
case <-sigs:
|
||||||
fmt.Printf("Recv stop sig")
|
log.Debug("receipt stop signal.")
|
||||||
break
|
bRun = false
|
||||||
default:
|
|
||||||
time.Sleep(time.Second)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
close(closeSig)
|
close(closeSig)
|
||||||
service.WaitStop()
|
service.WaitStop()
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
17
node/node_linux.go
Normal file
17
node/node_linux.go
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
// +build linux
|
||||||
|
|
||||||
|
package node
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
func KillProcess(processId int){
|
||||||
|
err := syscall.Kill(processId,syscall.Signal(10))
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("kill processid %d is fail:%+v.\n",processId,err)
|
||||||
|
}else{
|
||||||
|
fmt.Printf("kill processid %d is successful.\n",processId)
|
||||||
|
}
|
||||||
|
}
|
||||||
1
node/node_other.go
Normal file
1
node/node_other.go
Normal file
@@ -0,0 +1 @@
|
|||||||
|
package node
|
||||||
@@ -108,6 +108,7 @@ func (slf *Service) Run() {
|
|||||||
if bStop == true {
|
if bStop == true {
|
||||||
if atomic.AddInt32(&slf.gorouterNum,-1)<=0 {
|
if atomic.AddInt32(&slf.gorouterNum,-1)<=0 {
|
||||||
slf.startStatus = false
|
slf.startStatus = false
|
||||||
|
slf.Release()
|
||||||
slf.OnRelease()
|
slf.OnRelease()
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
@@ -120,8 +121,7 @@ func (slf *Service) GetName() string{
|
|||||||
return slf.name
|
return slf.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *Service) Release(){
|
||||||
func (slf *Service) OnRelease(){
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
buf := make([]byte, 40960)
|
buf := make([]byte, 40960)
|
||||||
@@ -134,6 +134,9 @@ func (slf *Service) OnRelease(){
|
|||||||
slf.this.OnRelease()
|
slf.this.OnRelease()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *Service) OnRelease(){
|
||||||
|
}
|
||||||
|
|
||||||
func (slf *Service) OnInit() error {
|
func (slf *Service) OnInit() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,3 +170,7 @@ func (slf *TcpService) Close(clientid uint64) {
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *TcpService) OnRelease() {
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user