Split to Threads Complete
This commit is contained in:
		
							
								
								
									
										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
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user