MasterClient.go
package staff
import (
"encoding/json"
"fmt"
"net"
"sync"
"saseul/config"
"saseul/ipc"
)
// MasterClient ๊ตฌ์กฐ์ฒด๋ ๋ง์คํฐ ์๋ฒ์ ํต์ ํ๊ธฐ ์ํ ํด๋ผ์ด์ธํธ์
๋๋ค.
type MasterClient struct {
client *ipc.TCPClient
mu sync.Mutex
}
var instance *MasterClient
var once sync.Once
// Instance ํจ์๋ MasterClient์ ์ฑ๊ธํค ์ธ์คํด์ค๋ฅผ ๋ฐํํฉ๋๋ค.
// ์ธ์คํด์ค๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค.
func Instance() *MasterClient {
once.Do(func() {
instance = &MasterClient{
client: ipc.NewTCPClient(),
}
instance.connect()
})
return instance
}
// connect ํจ์๋ ๋ง์คํฐ ์๋ฒ์ TCP ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค.
func (mc *MasterClient) connect() {
mc.client.Connect(config.MasterAddr, config.MasterPort)
}
// Send ํจ์๋ ๋ง์คํฐ ์๋ฒ์ ๋ช
๋ น์ ๋ณด๋ด๊ณ ์๋ต์ ๋ฐ์ต๋๋ค.
// ๋๊ธฐํ๋ ์ ๊ทผ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ฎคํ
์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
// ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์ผ๋ฉด ์ฐ๊ฒฐ์ ๋ค์ ์ค์ ํฉ๋๋ค.
// ๋ช
๋ น์ ์์ฑํ๊ณ ์ ์กํ ํ ์๋ต์ ๋ฐํํฉ๋๋ค.
func (mc *MasterClient) Send(commandType string, data interface{}) (string, error) {
mc.mu.Lock()
defer mc.mu.Unlock()
if !mc.client.IsConnected() {
mc.connect()
}
command := ipc.NewTCPCommand(commandType, data)
response, err := mc.client.Send(command)
if err != nil {
return "", err
}
return response, nil
}
์ฝ๋ ์ค๋ช
์ฃผ์ ๊ตฌ์กฐ์ฒด์ ํจ์ ์ค๋ช
์ฝ๋ ์์ฝ
์ฝ๋ ์ค๋ช
Last updated