dota

package
v0.0.0-...-b27f8e4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 7, 2024 License: LGPL-3.0 Imports: 12 Imported by: 0

README

Package dota

Dot-Area(点域)为多个Dot-Block的集合,可理解为一个普通的数据库。

Dot-Area负责管理一台服务器内的所有Dot-Block,提供通过网络进行访问和管理功能所需要的方法。

本package中包含Dot-Area初始化、Dot-Block的管理、Dot的操作、用户权限管理的相关操作的方法。

Web管理界面、Web Service接口将在其他package中提供。

dota的初始化过程

1.根据所给位置创建路径,并在其中添加area_deployed文件,写入dot-area的当前版本号,以确定这个是已经被dota占有的。

2.创建默认名为dota的block,深度为2。

3.创建名为allblock的dot,在数据体中用[]string的方式存放area中所有的block名。

4.创建名为alluser的dot,并创建一个alluser的context,up为空,down对应每一个用户。

5.创建默认的用户,dot的id为user_用户名,数据体中记录的为ns.User_PassWd_Power。

6.如果新增加用户不是管理员,则创建名为block的context,up为空,down为拥有权限的block名。

dota服务器端配置文件示例

{
	"server" : {
		"port" : 9999, // 监听端口
		"tls" : true, // 是否tls加密
		"pem_file" : "", // pem文件位置,如果tls为ture
		"key_file" : "", // key文件位置,如果tls为ture
	},
	"log" : {
		"run_log" : "/var/log/dota_run.log", // 运行日志位置,没有则走默认
		"err_log" : "/var/log/dota_err.log", // 错误日志位置,没有则走默认
	},
	"block":{
		"default_deep" : 3  // block的默认路径深度,如果在创建block的时候不指定,则根据这个默认进行,如果这里没有,则根据常量文件进行,之影响配置文件之后创建的block
	}
}

Documentation

Index

Constants

View Source
const (
	DOT_AREA_VERSION       uint8 = 1                       // 目前Dot-Area的版本
	DEPLOYED_FILE                = "dota_deployed"         // 占有文件
	DEFAULT_AREA_BLOCK           = "dota"                  // 默认的提供给Dot-Area使用的block
	DEFAULT_BLOCK_INDEX          = "allblock"              // 在默认区里存放其他所有存在的block索引名称的dot
	DEFAULT_BLOCK_PREFIX         = "block_"                // block的dot的前缀
	DEFAULT_USER_INDEX           = "alluser"               // 在默认区里存放所有用户名的dot
	DEFAULT_USER_CONTEXT         = "alluser"               // 在用户索引里,保存用户关系的上下文
	DEFAULT_USER_PREFIX          = "user_"                 // 用户dot的前缀
	DEFAULT_ADMIN_USER           = "insight00"             // 默认的管理员账户,不一定用到
	DEFAULT_ADMIN_PASSWORD       = "insight00"             // 默认的管理员密码,不一定用到
	DEFAULT_BLOCK_DEEP     uint8 = 2                       // 默认的block结构深度
	DEFAULT_RUN_LOG              = "/var/log/dota_run.log" // 默认运行日志位置
	DEFAULT_ERR_LOG              = "/var/log/dota_err.log" // 默认错误日志位置
	CLIENT_KEEPLIVE_TIME   int64 = 900                     // 客户端续期时间,默认是15分钟,也就是900秒
	SERVER_OUTLOG_TIME     int64 = 1800                    // 服务端认为客户端多久没有活动就要重新登录,默认是30分钟,也就是1800秒

	USER_AUTHORITY_NO     uint8 = iota // 没有权限
	USER_AUTHORITY_ADMIN               // 管理员权限
	USER_AUTHORITY_NORMAL              // 普通权限

	// 客户端请求服务端的操作
	OPERATE_TYPE_NO                   uint8 = iota // 操作状态,没有状态
	OPERATE_TYPE_LOGIN                             // 登陆,使用ns包中的To_Login
	OPERATE_TYPE_KEEPLIVE                          // 续期,直接发送ns包中的Login_Base_Info
	OPERATE_TYPE_CHANGE_PASSWORD                   // 修改密码,使用ns包中的Change_Password
	OPERATE_TYPE_NEW_USER                          // 添加用户,使用ns包中的User_PassWd_Power,这个也是用户dot的数据体
	OPERATE_TYPE_USER_ADD_BLOCK                    // 给用户增加一个bock权限,使用ns包中的User_Block
	OPERATE_TYPE_USER_DEL_BLOCK                    // 给用户减一个block权限,使用ns包中的User_Block
	OPERATE_TYPE_DEL_USER                          // 删除用户,直接加用户名,用String_In_Byte
	OPERATE_TYPE_NEW_BLOCK                         // 新增Block,直接加block名,用String_In_Byte
	OPERATE_TYPE_DEL_BLOCK                         // 删除Block,直接加block名,用String_In_Byte
	OPERATE_TYPE_NEW_DOT                           // 新建dot,使用ns包中的A_Dot_With_A_Context
	OPERATE_TYPE_NEW_DOT_WITH_CONTEXT              // 新建包含一个上下关系的dot,使用ns包中的A_Dot_With_A_Context
	OPERATE_TYPE_DEL_DOT                           // 删除dot,直接加dot的名字,用String_In_Byte
	OPERATE_TYPE_UPDATE_DATA                       // 更新数据,使用ns包中的A_Dot_With_A_Context
	OPERATE_TYPE_READ_DATA                         // 读取数据,直接加dot的名字,用String_In_Byte
	OPERATE_TYPE_UPDATE_ONE_DOWN                   // 更新一个down,用Change_One_Down
	OPERATE_TYPE_UPDATE_ONE_UP                     // 更新一个up,用Change_One_Up
	OPERATE_TYPE_DEL_ONE_DOWN                      // 删除一个down,用Change_One_Down
	OPERATE_TYPE_ADD_CONTEXT                       // 添加一个context,使用ns包中的A_Dot_With_A_Context
	OPERATE_TYPE_UPDATE_CONTEXT                    // 完整更新一个context,使用ns包中的A_Dot_With_A_Context
	OPERATE_TYPE_DEL_CONTEXT                       // 删除一个完整context,使用ns包中的A_Dot_With_A_Context
	OPERATE_TYPE_READ_CONTEXT                      // 读一个完整的context,使用ns包中的A_Dot_With_A_Context
	OPERATE_TYPE_READ_ONE_UP                       // 读一个up,用Change_One_Up
	OPERATE_TYPE_READ_ONE_DOWN                     // 读一个down,用Change_One_Down
	OPERATE_TYPE_READ_DATA_TV                      // 读data的time和version,直接加dot的名字,用String_In_Byte
	OPERATE_TYPE_READ_INDEX_TV                     // 读context索引的time和version,直接加dot的名字,用String_In_Byte
	OPERATE_TYPE_READ_CONTEXT_TV                   // 读某个context的time和version,使用ns包中的Change_One_Up

	// 服务端返回给客户端的状态
	OPERATE_RETURN_NO              uint8 = iota // 操作的返回状态,没有状态
	OPERATE_RETURN_TYPE_NOT_HAVE                // 请求的操作不存在
	OPERATE_RETURN_TYPE_FORMAT_ERR              // 请求的操作格式错误
	OPERATE_RETURN_PASSWD_NO                    // 用户名或密码错误
	OPERATE_RETURN_LOGIN_NO                     // 没有登陆,客户端应该赶紧重新发起登录
	OPERATE_RETURN_ALL_OK                       // 操作都没问题
	OPERATE_RETURN_NOT_FOUND                    // 没有找到
	OPERATE_RETURN_ERROR                        // 操作错误,这个必定带有返回数据
	OPERATE_RETURN_CLOSED                       // 服务端已关闭
)

Variables

This section is empty.

Functions

func InitArea

func InitArea(path string) (err error)

初始化一个Dot-Area,在制定的目录path下创建area的完整结构,并创建默认的block并创建默认的管理员用户名和密码

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Dot-Area的客户端

func NewClient

func NewClient(username string, password string, net_connect *nst.Client) (client *Client)

创建客户端

func (*Client) KeepLive

func (c *Client) KeepLive() (err error)

保持存活 建议每间隔CLIENT_KEEPLIVE_TIME(15分钟)执行一次,以便保持登录状态

func (*Client) ToLogin

func (c *Client) ToLogin() (err error)

去进行登录 建议首先执行一次ToLogin,并保持KeepLive周期性活动

type Server

type Server struct {
	// contains filtered or unexported fields
}

func (*Server) Close

func (s *Server) Close() (err error)

当执行关闭方法时Close()的时候,首先将closed置于true,这样NSTexec将不在接收新的请求 执行WaitGroup的Wait进行等待堵塞,预防还有未结束的处理 当WaitGroup不再堵塞,则执行完Close 建议先执行nst.Server的Close,让其不在接收新请求,再执行这个Close将所有剩下的执行完毕

func (*Server) NSTexec

func (s *Server) NSTexec(ce *nst.ConnExec) (stat nst.SendStat, err error)

nst的ConnExecer实现

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL