porter

package
v0.0.0-...-2e4edee Latest Latest
Warning

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

Go to latest
Published: Feb 28, 2022 License: LGPL-3.0 Imports: 8 Imported by: 0

Documentation

Overview

搬运工——将角色从一个地方原封不动的搬到另一个地方

本package使用符合rolesio.RolesInOutManager接口的存储器对角色进行保存,并使用nst所提供的网络支持。

本package使用hardstore对角色进行编码和解码。也就是说我们需要gob.Register()对roles.Roleer接口的类型进行注册。

Receiver

这是货物的接收者,它监听一个网络端口并对收到的角色进行处理。

它需要两个配置选项,具体如下:

# 监听端口
listen = 9998
# 身份验证码
code = ReceiverCode

所有配置选项都提供方法在运行时更改,包括换用新的监听接口。

收到角色后的处理方法不依靠配置文件指定,需要自己注册。 如果要直接进行保存则使用SetStorage()方法注册一个符合rolesio.RolesInOutManager接口的角色存储装置。 如果需要交由某个外部函数处理,则使用SetOperater()方法注册一个符合ReceiverOperater接口的外部实例。

一定要注意,上面的注册方法,永远都只会生效一个,且是最后注册的那个。

Sender

这是货物的发送者,将角色发送给接收者。

它需要一个*cpool.Block类型的配置选项,具体示例如下:

# main为必不可少的节点
[main]
# 发送者名字
name = IamAsender
# 接收者配置列表名,对应下面具体接收者的配置信息
receiver = R01,R02

[R01]
# 接收者访问地址
address = 192.168.1.101:11111
# 接收者的身份验证码
code = ReceiverCode
# 接收者的连接数
conn_num = 5

[R02]
# 接收者访问地址
address = 192.168.1.102:11111
# 接收者的身份验证码
code = ReceiverCode
# 接收者的连接数
conn_num = 5

发送者提供最简单的将角色发送出去的方法:SendRole、SendRoleToReceiver。 第一个会将角色发给所有连接的接收者,而第二个则只会发送给某一个接收者。

Index

Constants

View Source
const (
	OPERATE_NOT_SET = iota
	OPERATE_TO_STORE
	OPERATE_TO_FUNCTION
)

接收者接收后的处理方法,保存还是交由处理函数处理

View Source
const (
	DATA_NOTHING = iota
	// 数据并不是期望的
	DATA_NOT_EXPECT
	// 请发送数据
	DATA_PLEASE
	// 数据一切OK
	DATA_ALL_OK
)

来往的数据状态

Variables

This section is empty.

Functions

This section is empty.

Types

type Cargo

type Cargo struct {
	// 角色Id
	Id string
	// 发送者名字
	SenderName string
	// 接收者code
	ReceiverCode string
	// 角色的身体
	RoleBody []byte
	// 角色的关系
	RoleRela []byte
	// 角色的版本
	RoleVer []byte
}

货物,这是搬运工需要搬运的东西,也就是编码后的需要传递的角色信息,这里的编码使用hardstore所提供的方法

type Net_ReceiverReceipt

type Net_ReceiverReceipt struct {
	// 数据状态,来自DATA_*
	DataStat uint8
	// 返回的错误
	Error string
}

slave回执,slave收到PrefixStat之后的第一步返回信息

type Receiver

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

接收者

func NewReceiver

func NewReceiver(config *cpool.Section, logs *ilogs.Logs) (receiver *Receiver, err error)

创建一个接收者

func (*Receiver) ExecTCP

func (r *Receiver) ExecTCP(ce *nst.ConnExec) (err error)

nst.TcpServer要求的接口

直接接收信息,看情况进行处理或怎么样

func (*Receiver) SetCode

func (r *Receiver) SetCode(code string)

设置身份验证码

func (*Receiver) SetLog

func (r *Receiver) SetLog(logs *ilogs.Logs)

运行时设置日志

func (*Receiver) SetOperater

func (r *Receiver) SetOperater(function ReceiverOperater)

注册处理者函数

func (*Receiver) SetServerListen

func (r *Receiver) SetServerListen(listen string) (err error)

运行时改变监听

func (*Receiver) SetStorage

func (r *Receiver) SetStorage(store rolesio.RolesInOutManager)

注册存储器,SetStorage和SetOperater两个方法,将使用最后一个设置的,不会同时使用

type ReceiverOperater

type ReceiverOperater interface {
	Operate(sendername string, role roles.Roleer) (err error)
}

接收者的注册处理方法的接口

type Sender

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

发送者

func NewSender

func NewSender(config *cpool.Block, logs *ilogs.Logs) (sender *Sender, err error)

创建一个发送者

func (*Sender) Close

func (s *Sender) Close()

关闭连接

func (*Sender) SendRole

func (s *Sender) SendRole(role roles.Roleer) (err error)

向所有接收者发送角色

func (*Sender) SendRoleToReceiver

func (s *Sender) SendRoleToReceiver(receiver string, role roles.Roleer) (err error)

向某一个接收者发送角色

func (*Sender) SetConfig

func (s *Sender) SetConfig(config *cpool.Block) (err error)

运行时设置配置

func (*Sender) SetLog

func (s *Sender) SetLog(logs *ilogs.Logs)

运行时设置日志

Jump to

Keyboard shortcuts

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