pretty comments
This commit is contained in:
parent
018f53b63a
commit
4af82c672c
|
@ -51,10 +51,12 @@ type conf struct {
|
||||||
var Wide conf
|
var Wide conf
|
||||||
|
|
||||||
// 维护非变化部分的配置.
|
// 维护非变化部分的配置.
|
||||||
|
//
|
||||||
// 只有 Users 是会运行时变化的,保存回写文件时要使用这个变量.
|
// 只有 Users 是会运行时变化的,保存回写文件时要使用这个变量.
|
||||||
var rawWide conf
|
var rawWide conf
|
||||||
|
|
||||||
// 定时检查 Wide 运行环境.
|
// 定时检查 Wide 运行环境.
|
||||||
|
//
|
||||||
// 如果是特别严重的问题(比如 $GOPATH 不存在)则退出进程,另一些不太严重的问题(比如 gocode 不存在)则放入全局通知队列.
|
// 如果是特别严重的问题(比如 $GOPATH 不存在)则退出进程,另一些不太严重的问题(比如 gocode 不存在)则放入全局通知队列.
|
||||||
func FixedTimeCheckEnv() {
|
func FixedTimeCheckEnv() {
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -93,6 +95,7 @@ func FixedTimeCheckEnv() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 定时(10 分钟)保存配置.
|
// 定时(10 分钟)保存配置.
|
||||||
|
//
|
||||||
// 主要目的是保存用户会话内容,以备下一次用户打开 Wide 时进行会话还原.
|
// 主要目的是保存用户会话内容,以备下一次用户打开 Wide 时进行会话还原.
|
||||||
func FixedTimeSave() {
|
func FixedTimeSave() {
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -105,8 +108,7 @@ func FixedTimeSave() {
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取 username 指定的用户的工作空间路径.
|
// 获取 username 指定的用户的工作空间路径,查找不到时返回空字符串.
|
||||||
// 查找不到时返回空字符串.
|
|
||||||
func (*conf) GetUserWorkspace(username string) string {
|
func (*conf) GetUserWorkspace(username string) string {
|
||||||
for _, user := range Wide.Users {
|
for _, user := range Wide.Users {
|
||||||
if user.Name == username {
|
if user.Name == username {
|
||||||
|
@ -229,6 +231,7 @@ func Load() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查文件或目录是否存在.
|
// 检查文件或目录是否存在.
|
||||||
|
//
|
||||||
// 如果由 filename 指定的文件或目录存在则返回 true,否则返回 false.
|
// 如果由 filename 指定的文件或目录存在则返回 true,否则返回 false.
|
||||||
func isExist(filename string) bool {
|
func isExist(filename string) bool {
|
||||||
_, err := os.Stat(filename)
|
_, err := os.Stat(filename)
|
||||||
|
|
|
@ -333,6 +333,7 @@ func FindUsagesHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算光标偏移位置.
|
// 计算光标偏移位置.
|
||||||
|
//
|
||||||
// line 指定了行号(第一行为 0),ch 指定了列号(第一列为 0).
|
// line 指定了行号(第一行为 0),ch 指定了列号(第一列为 0).
|
||||||
func getCursorOffset(code string, line, ch int) (offset int) {
|
func getCursorOffset(code string, line, ch int) (offset int) {
|
||||||
lines := strings.Split(code, "\n")
|
lines := strings.Split(code, "\n")
|
||||||
|
|
|
@ -20,6 +20,7 @@ type Event struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 全局事件队列.
|
// 全局事件队列.
|
||||||
|
//
|
||||||
// 入队的事件将分发到每个用户的事件队列中.
|
// 入队的事件将分发到每个用户的事件队列中.
|
||||||
var EventQueue = make(chan int, MaxQueueLength)
|
var EventQueue = make(chan int, MaxQueueLength)
|
||||||
|
|
||||||
|
@ -33,6 +34,7 @@ type UserEventQueue struct {
|
||||||
type Queues map[string]*UserEventQueue
|
type Queues map[string]*UserEventQueue
|
||||||
|
|
||||||
// 用户事件队列集.
|
// 用户事件队列集.
|
||||||
|
//
|
||||||
// <sid, *UserEventQueue>
|
// <sid, *UserEventQueue>
|
||||||
var UserEventQueues = Queues{}
|
var UserEventQueues = Queues{}
|
||||||
|
|
||||||
|
|
5
main.go
5
main.go
|
@ -218,8 +218,9 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// HTTP Handler 包装.
|
// HTTP Handler 包装,完成共性处理.
|
||||||
// 完成共性处理:
|
//
|
||||||
|
// 共性处理:
|
||||||
//
|
//
|
||||||
// 1. panic recover
|
// 1. panic recover
|
||||||
// 2. 请求计时
|
// 2. 请求计时
|
||||||
|
|
|
@ -32,6 +32,7 @@ type Notification struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 用户事件处理:将事件转为通知,并通过通知通道推送给前端.
|
// 用户事件处理:将事件转为通知,并通过通知通道推送给前端.
|
||||||
|
//
|
||||||
// 当用户事件队列接收到事件时将会调用该函数进行处理.
|
// 当用户事件队列接收到事件时将会调用该函数进行处理.
|
||||||
func event2Notification(e *event.Event) {
|
func event2Notification(e *event.Event) {
|
||||||
if nil == session.NotificationWS[e.Sid] {
|
if nil == session.NotificationWS[e.Sid] {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// 所有用户正在运行的程序进程集.
|
// 所有用户正在运行的程序进程集.
|
||||||
|
//
|
||||||
// <sid, []*os.Process>
|
// <sid, []*os.Process>
|
||||||
type procs map[string][]*os.Process
|
type procs map[string][]*os.Process
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// 会话操作.
|
// 会话操作.
|
||||||
|
//
|
||||||
// Wide 服务器端需要维护两种会话:
|
// Wide 服务器端需要维护两种会话:
|
||||||
//
|
//
|
||||||
// 1. HTTP 会话:主要用于验证登录
|
// 1. HTTP 会话:主要用于验证登录
|
||||||
|
@ -65,6 +66,7 @@ var WideSessions Sessions
|
||||||
var mutex sync.Mutex
|
var mutex sync.Mutex
|
||||||
|
|
||||||
// 在一些特殊情况(例如浏览器不间断刷新/在源代码视图刷新)下 Wide 会话集内会出现无效会话,该函数定时(1 小时)检查并移除这些无效会话.
|
// 在一些特殊情况(例如浏览器不间断刷新/在源代码视图刷新)下 Wide 会话集内会出现无效会话,该函数定时(1 小时)检查并移除这些无效会话.
|
||||||
|
//
|
||||||
// 无效会话:在检查时间内 30 分钟都没有使用过的会话,WideSession.Updated 字段.
|
// 无效会话:在检查时间内 30 分钟都没有使用过的会话,WideSession.Updated 字段.
|
||||||
func FixedTimeRelease() {
|
func FixedTimeRelease() {
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -85,8 +87,7 @@ func FixedTimeRelease() {
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 建立会话通道.
|
// 建立会话通道. 通道断开时销毁会话状态,回收相关资源.
|
||||||
// 通道断开时销毁会话状态,回收相关资源.
|
|
||||||
func WSHandler(w http.ResponseWriter, r *http.Request) {
|
func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
sid := r.URL.Query()["sid"][0]
|
sid := r.URL.Query()["sid"][0]
|
||||||
wSession := WideSessions.Get(sid)
|
wSession := WideSessions.Get(sid)
|
||||||
|
@ -222,6 +223,7 @@ func (sessions *Sessions) Get(sid string) *WideSession {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 移除 Wide 会话,释放相关资源.
|
// 移除 Wide 会话,释放相关资源.
|
||||||
|
//
|
||||||
// 会话相关资源:
|
// 会话相关资源:
|
||||||
//
|
//
|
||||||
// 1. 用户事件队列
|
// 1. 用户事件队列
|
||||||
|
|
|
@ -19,6 +19,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Shell 通道.
|
// Shell 通道.
|
||||||
|
//
|
||||||
// <sid, *util.WSChannel>>
|
// <sid, *util.WSChannel>>
|
||||||
var ShellWS = map[string]*util.WSChannel{}
|
var ShellWS = map[string]*util.WSChannel{}
|
||||||
|
|
||||||
|
@ -145,6 +146,7 @@ func pipeCommands(username string, commands ...*exec.Cmd) string {
|
||||||
|
|
||||||
out, err := last.CombinedOutput()
|
out, err := last.CombinedOutput()
|
||||||
|
|
||||||
|
// 结束进程,释放资源
|
||||||
for _, command := range commands[:len(commands)-1] {
|
for _, command := range commands[:len(commands)-1] {
|
||||||
command.Wait()
|
command.Wait()
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ type mynet struct{}
|
||||||
// 网络工具.
|
// 网络工具.
|
||||||
var Net = mynet{}
|
var Net = mynet{}
|
||||||
|
|
||||||
|
// 获取第一块网卡的 IP 地址.
|
||||||
func (*mynet) LocalIP() (string, error) {
|
func (*mynet) LocalIP() (string, error) {
|
||||||
tt, err := net.Interfaces()
|
tt, err := net.Interfaces()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue