Split to Threads Complete
This commit is contained in:
parent
0c96801906
commit
46b8d5bea0
32
mc_man.go
32
mc_man.go
@ -73,15 +73,29 @@ func main() {
|
|||||||
mm := util.NewManager(stdin)
|
mm := util.NewManager(stdin)
|
||||||
util.LoadConfig(&mm)
|
util.LoadConfig(&mm)
|
||||||
|
|
||||||
// The forever loop to monitor the channel
|
go func() {
|
||||||
loop:
|
for {
|
||||||
for {
|
s, ok := <-ch
|
||||||
s, ok := <-ch
|
if !ok {
|
||||||
if !ok {
|
break
|
||||||
break loop
|
}
|
||||||
|
m := util.NewMessage(s)
|
||||||
|
fmt.Printf("\x1b[34;1m%s\x1b[0m", m.Output())
|
||||||
|
mm.ProcessMessage(s)
|
||||||
}
|
}
|
||||||
m := util.NewMessage(s)
|
}()
|
||||||
fmt.Printf("\x1b[34;1m%s\x1b[0m", m.Output())
|
|
||||||
mm.ProcessMessage(s)
|
// The forever loop to monitor everything
|
||||||
|
for {
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
if util.StopServer {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
// fmt.Printf("Monitoring... (%d users)\n", len(util.GetConfig().LoggedInUsers))
|
||||||
|
// for i, u := range util.GetConfig().LoggedInUsers {
|
||||||
|
// if !u.HasQuota() {
|
||||||
|
// fmt.Printf(">> User %s is out of quota\n", u.Name)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"github.com/antonholmquist/jason"
|
"github.com/antonholmquist/jason"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
// "log"
|
|
||||||
// "os"
|
|
||||||
// "bytes"
|
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -22,6 +19,7 @@ type Config struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var c *Config
|
var c *Config
|
||||||
|
var StopServer = false
|
||||||
|
|
||||||
func LoadConfig(mm *MessageManager) {
|
func LoadConfig(mm *MessageManager) {
|
||||||
c = new(Config)
|
c = new(Config)
|
||||||
@ -35,6 +33,7 @@ func LoadConfig(mm *MessageManager) {
|
|||||||
AddListener(func(i *Message) bool {
|
AddListener(func(i *Message) bool {
|
||||||
if i.User.IsOp && i.Text == "!stop\n" {
|
if i.User.IsOp && i.Text == "!stop\n" {
|
||||||
mm.Output("stop")
|
mm.Output("stop")
|
||||||
|
StopServer = true
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@ -169,11 +168,32 @@ func LoadConfig(mm *MessageManager) {
|
|||||||
find = r[0]
|
find = r[0]
|
||||||
// find should be the user name now
|
// find should be the user name now
|
||||||
LoginUser(*FindUser(find, true))
|
LoginUser(*FindUser(find, true))
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
|
// Add logout listener
|
||||||
|
AddListener(func(i *Message) bool {
|
||||||
|
if i.User.Name == "" && strings.Contains(i.Text, " lost connection: ") {
|
||||||
|
// Find the user that just logged out
|
||||||
|
r := strings.Split(i.Text, "]: ")
|
||||||
|
find := ""
|
||||||
|
if len(r) > 0 {
|
||||||
|
find = r[1]
|
||||||
|
r := strings.Split(find, " lost connection: ")
|
||||||
|
if len(r) > 0 {
|
||||||
|
find = r[0]
|
||||||
|
// find should be the user name now
|
||||||
|
LogoutUser(*FindUser(find, false))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
|
||||||
// Add !help listener
|
// Add !help listener
|
||||||
AddListener(func(i *Message) bool {
|
AddListener(func(i *Message) bool {
|
||||||
if i.User.Name != "" && i.Text == "!help\n" {
|
if i.User.Name != "" && i.Text == "!help\n" {
|
||||||
|
25
util/user.go
25
util/user.go
@ -1,5 +1,9 @@
|
|||||||
package util
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
Name string
|
Name string
|
||||||
Index int
|
Index int
|
||||||
@ -7,6 +11,9 @@ type User struct {
|
|||||||
Home string
|
Home string
|
||||||
Porch string
|
Porch string
|
||||||
ToJSONString func() string
|
ToJSONString func() string
|
||||||
|
Quota time.Duration
|
||||||
|
quotaUsed time.Duration
|
||||||
|
loginTime time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUser(nm string) *User {
|
func NewUser(nm string) *User {
|
||||||
@ -19,7 +26,23 @@ func NewUser(nm string) *User {
|
|||||||
m.Home = ""
|
m.Home = ""
|
||||||
m.Porch = ""
|
m.Porch = ""
|
||||||
m.ToJSONString = func() string {
|
m.ToJSONString = func() string {
|
||||||
return "{\"name\":\"" + m.Name + "\",\"home\":\"" + m.Home + "\",\"porch\":\"" + m.Porch + "\"}"
|
return "{\"name\":\"" + m.Name + "\",\"home\":\"" + m.Home + "\",\"porch\":\"" + m.Porch + "\",\"quota\":\"" + string(m.Quota) + "\",\"quota_used\":\"" + string(m.quotaUsed) + "\"}"
|
||||||
}
|
}
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *User) HasQuota() bool {
|
||||||
|
if u.Quota > 0 {
|
||||||
|
return u.quotaUsed < u.Quota
|
||||||
|
} else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *User) RemainingQuota() time.Duration {
|
||||||
|
if u.Quota > 0 {
|
||||||
|
return u.Quota - u.quotaUsed
|
||||||
|
} else {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user