Genesis.go

package script

import (
	"flag"
	"fmt"
	"os"

	"saseul/data/tracker"
)

// AddTracker ๊ตฌ์กฐ์ฒด๋Š” ํ”ผ์–ด ํˆฌ ํ”ผ์–ด ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํŠธ๋ž˜์ปค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
type AddTracker struct {
	Description string
}

// NewAddTracker ํ•จ์ˆ˜๋Š” AddTracker ๊ตฌ์กฐ์ฒด์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
func NewAddTracker() *AddTracker {
	return &AddTracker{
		Description: "Adding a tracker to the peer-to-peer search algorithm.",
	}
}

// Main ํ•จ์ˆ˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ , ์ ์ ˆํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํŠธ๋ž˜์ปค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
func (at *AddTracker) Main() {
	// peer์™€ p ํ”Œ๋ž˜๊ทธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
	peer := flag.String("peer", "", "The peer you want to register on the tracker.")
	p := flag.String("p", "", "The peer you want to register on the tracker (short form).")
	
	// ํ”Œ๋ž˜๊ทธ๋ฅผ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
	flag.Parse()

	// ํ”Œ๋ž˜๊ทธ ๊ฐ’์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๋น„์–ด ์žˆ์œผ๋ฉด Help ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
	if *peer == "" && *p == "" {
		at.Help()
	} else {
		// ํ”Œ๋ž˜๊ทธ ๊ฐ’์— ๋”ฐ๋ผ Exec ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํŠธ๋ž˜์ปค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
		if *peer != "" {
			at.Exec(*peer)
		} else {
			at.Exec(*p)
		}
	}
}

// Exec ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ ํ”ผ์–ด๋ฅผ ํŠธ๋ž˜์ปค์— ์ถ”๊ฐ€ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
func (at *AddTracker) Exec(peer string) {
	// tracker.AddKnownHosts ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ”ผ์–ด๋ฅผ ํŠธ๋ž˜์ปค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
	if tracker.AddKnownHosts(peer) {
		fmt.Printf("\nTracker has been added: %s\n", peer)
	} else {
		fmt.Printf("\nInvalid peer: %s\n", peer)
	}
}

// Help ํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
func (at *AddTracker) Help() {
	// ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ๋ฒ•์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
	flag.Usage()
	// ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
	os.Exit(1)
}

ํ•จ์ˆ˜ ์„ค๋ช…

NewAddTracker ํ•จ์ˆ˜

  • ์—ญํ• : AddTracker ๊ตฌ์กฐ์ฒด์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ์„ค๋ช…: ์ด ํ•จ์ˆ˜๋Š” AddTracker ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Description ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค๋ช…์€ ํ”ผ์–ด ํˆฌ ํ”ผ์–ด ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํŠธ๋ž˜์ปค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Main ํ•จ์ˆ˜

  • ์—ญํ• : ํ”Œ๋ž˜๊ทธ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ , ์ ์ ˆํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํŠธ๋ž˜์ปค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ์„ค๋ช…:

    1. peer์™€ p ํ”Œ๋ž˜๊ทธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. peer๋Š” ๊ธด ํ˜•์‹์˜ ํ”Œ๋ž˜๊ทธ์ด๊ณ  p๋Š” ์งง์€ ํ˜•์‹์˜ ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค.

    2. ํ”Œ๋ž˜๊ทธ ๊ฐ’์„ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.

    3. ๋‘ ํ”Œ๋ž˜๊ทธ ๋ชจ๋‘ ๊ฐ’์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋น„์–ด ์žˆ์œผ๋ฉด Help ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ๋ฒ•์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    4. peer ํ”Œ๋ž˜๊ทธ์— ๊ฐ’์ด ์žˆ์œผ๋ฉด Exec ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํŠธ๋ž˜์ปค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด p ํ”Œ๋ž˜๊ทธ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ Exec ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

Exec ํ•จ์ˆ˜

  • ์—ญํ• : ์ฃผ์–ด์ง„ ํ”ผ์–ด๋ฅผ ํŠธ๋ž˜์ปค์— ์ถ”๊ฐ€ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • ์„ค๋ช…: tracker.AddKnownHosts ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ฃผ์–ด์ง„ ํ”ผ์–ด๋ฅผ ํŠธ๋ž˜์ปค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€์— ์„ฑ๊ณตํ•˜๋ฉด ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๋ฅผ, ์‹คํŒจํ•˜๋ฉด ์‹คํŒจ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

Help ํ•จ์ˆ˜

  • ์—ญํ• : ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

  • ์„ค๋ช…: flag.Usage ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ”Œ๋ž˜๊ทธ ์‚ฌ์šฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜๊ณ , os.Exit(1)์„ ํ˜ธ์ถœํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ”Œ๋ž˜๊ทธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ œ๊ณต๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ํ”ผ์–ด ํˆฌ ํ”ผ์–ด ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ƒˆ๋กœ์šด ํŠธ๋ž˜์ปค๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Main ํ•จ์ˆ˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์ ์ ˆํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , Exec ํ•จ์ˆ˜๋Š” ํŠธ๋ž˜์ปค์— ํ”ผ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Help ํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์œผ๋กœ ๋ช…๋ น์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

Last updated