PoolCommands.go

package datasource

import (
	"reflect"
)

type PoolCommands struct{}

// Base commands
const (
	IS_RUNNING = "is_running"
)

// Tracker commands
const (
	ADD_PEER_REQUEST   = "add_peer"
	PEER_REQUESTS      = "peer"
	DRAIN_PEER_REQUESTS = "drain_peer"
)

// Policy commands
const (
	SET_POLICY = "set_policy"
	GET_POLICY = "get_policy"
)

// Chunk commands
const (
	ADD_TX_INDEX = "add_tx"
	EXISTS_TX    = "exists_tx"
	INFO_TXS     = "info_txs"
	REMOVE_TXS   = "remove_txs"
	FLUSH_TXS    = "flush_txs"

	ADD_CHUNK_INDEX = "add_chunk"
	COUNT_CHUNKS    = "count_chunk"
	REMOVE_CHUNKS   = "remove_chunk"

	ADD_HYPOTHESIS_INDEX = "add_hy"
	COUNT_HYPOTHESES     = "count_hy"
	REMOVE_HYPOTHESES    = "remove_hy"

	ADD_RECEIPT_INDEX = "add_rcp"
	COUNT_RECEIPTS    = "count_rcp"
	REMOVE_RECEIPTS   = "remove_rcp"
)

// Status commands
const (
	UNIVERSAL_INDEXES         = "uidx"
	ADD_UNIVERSAL_INDEXES     = "add_uidx"
	SEARCH_UNIVERSAL_INDEXES  = "search_uidx"
	COUNT_UNIVERSAL_INDEXES   = "count_uidx"

	LOCAL_INDEXES         = "lidx"
	ADD_LOCAL_INDEXES     = "add_lidx"
	SEARCH_LOCAL_INDEXES  = "search_lidx"
	COUNT_LOCAL_INDEXES   = "count_lidx"
)

// Test command
const (
	TEST = "test"
)

var refMap = map[string][]byte{}

func LoadPoolCommands() {
	rType := reflect.TypeOf(PoolCommands{})
	for i := 0; i < rType.NumField(); i++ {
		field := rType.Field(i)
		if field.Type.Kind() == reflect.String {
			refMap[field.Tag.Get("const")] = []byte{byte(i)}
		}
	}
}

func Ref(command string) []byte {
	if ref, ok := refMap[command]; ok {
		return ref
	}
	return []byte{'Z'}
}

PoolCommands ๊ตฌ์กฐ์ฒด์™€ ๋ช…๋ น ์ƒ์ˆ˜

์šฐ์„ , PoolCommands ๊ตฌ์กฐ์ฒด์™€ ์—ฌ๋Ÿฌ ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ƒ์ˆ˜๋Š” ํŠน์ • ๋ช…๋ น์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ฌธ์ž์—ด๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ์ฒด ์ •์˜

์ด ๊ตฌ์กฐ์ฒด๋Š” ํ•„๋“œ๊ฐ€ ์—†๋Š” ๋นˆ ๊ตฌ์กฐ์ฒด๋กœ, ๋ช…๋ น์„ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ช…๋ น ์ƒ์ˆ˜ ์ •์˜

๊ฐ ์ƒ์ˆ˜๋Š” ํŠน์ • ๋ช…๋ น์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋‚˜์ค‘์— Send ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ช…๋ น ์ฐธ์กฐ ๋งคํ•‘

๋ช…๋ น์„ ๋ฌธ์ž์—ด๋กœ ์ฐธ์กฐํ•˜๋Š” ๋Œ€์‹ , ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งคํ•‘์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ช…๋ น์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น ์ฐธ์กฐ ๋งคํ•‘

refMap์€ ๋ช…๋ น ๋ฌธ์ž์—ด์„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ๋งคํ•‘ํ•˜๋Š” ๋งต์ž…๋‹ˆ๋‹ค.

๋ช…๋ น ๋กœ๋“œ ํ•จ์ˆ˜

LoadPoolCommands ํ•จ์ˆ˜๋Š” PoolCommands ๊ตฌ์กฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๋ฐ˜์‚ฌ(reflection)๋ฅผ ํ†ตํ•ด ์ฝ๊ณ , ๊ฐ ํ•„๋“œ์˜ ์ด๋ฆ„์„ refMap์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๊ฐ ํ•„๋“œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น ์ฐธ์กฐ ํ•จ์ˆ˜

Ref ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ ๋ช…๋ น ๋ฌธ์ž์—ด์„ refMap์—์„œ ์ฐพ์•„์„œ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ•ด๋‹น ๋ช…๋ น์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ Z๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ์‚ฌ์šฉ

LoadPoolCommands ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ช…๋ น ๋งคํ•‘์„ ๋กœ๋“œํ•œ ํ›„, Ref ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ช…๋ น์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋Š” add_tx ๋ช…๋ น์„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝ

  1. PoolCommands ๊ตฌ์กฐ์ฒด๋Š” ๋‹ค์–‘ํ•œ ๋ช…๋ น์„ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ฐ ๋ช…๋ น์€ ๋ฌธ์ž์—ด ์ƒ์ˆ˜๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

  3. LoadPoolCommands ํ•จ์ˆ˜๋Š” ๋ช…๋ น์„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

  4. Ref ํ•จ์ˆ˜๋Š” ๋ช…๋ น ๋ฌธ์ž์—ด์„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ช…๋ น์„ ๋” ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Last updated