Skip to content

Latest commit

Β 

History

History
126 lines (101 loc) Β· 3.55 KB

File metadata and controls

126 lines (101 loc) Β· 3.55 KB

🏬 Server, Client Framework - NWServerBaseFramework

μ„œλ²„, ν΄λΌμ΄μ–ΈνŠΈ κ°œλ°œμ„ EventListener 기반으둜 쉽고 λΉ λ₯΄κ²Œ 개발 ν•  μˆ˜μžˆλ„λ‘ λ§Œλ“€μ–΄μ§„ golang socket framework μž…λ‹ˆλ‹€.

πŸ’» How to use server framework?

package main

import (
    "fmt"
    "sync"

    "github.com/InoFlexin/serverbase/base"
)

type MyMessage base.Message

func (m MyMessage) OnMessageReceive(message *base.Message, client net.Conn) {
	fmt.Println("receive: " + message.Json + " key: " + message.Key)

	packetMessage := base.Message{Json: "pong", Key: base.GetServerKey(), Action: base.ON_MSG_RECEIVE}
	base.Write(&packetMessage, client)
}

func (m MyMessage) OnConnect(message *base.Message, client net.Conn) {
	fmt.Println("on connect: "+message.Json+" action: %d", message.Action)
}

func (m MyMessage) OnClose(err error) {
	log.Println(err)
}

func main() {
	wg := sync.WaitGroup{} 

	ev := MyMessage{} // μ„œλ²„ 이벀트 μ„ μ–Έ
	boot := base.Boot{Protocol: "tcp",
                      Port: ":5092",
                      ServerName: "test_server",
                      Callback: ev,
                      ReceiveSize: 
                      Complex: false}
	// server boot option μ„€μ •

	wg.Add(1) // synchronized gorutine
	go base.ServerStart(boot, &wg)
	wg.Wait()
}

πŸ’» How to use client framework?

package main

import (
	"fmt"
	"sync"

	"github.com/InoFlexin/serverbase/base"
	"github.com/InoFlexin/serverbase/client"
)

type MyClientMessage base.Message //Client Message νƒ€μž… μ •μ˜

// =================== Client Event Listeners ======================
func (m MyMessage) OnMessageReceive(message *base.Message, client net.Conn) {
	fmt.Println("on message receive: "+message.Json+" action: %d", message.Action)

	base.Write(&base.Message{Json: "pong", Action: base.ON_MSG_RECEIVE}, client)
}

func (m MyMessage) OnConnect(message *base.Message, client net.Conn) {
	fmt.Println("on connect: "+message.Json+" action: %d", message.Action)
}

func (m MyMessage) OnClose(err error) {
	log.Println(err)
}
// ==================================================================

func main() {
    wg := sync.WaitGroup{}

    event := MyClientMessage{}
    clientBoot := client.ClientBoot{Protocol: "tcp",
                                    HostAddr: "localhost",
                                    HostPort: ":5092",
                                    Callback: event, 
                                    BufferSize: 1024
                                    Complex: true}		
    wg.Add(1) // synchronized goroutine
    go client.ConnectServer(&clientBoot, &wg)
    wg.Wait()

    /*
        ν•΄λ‹Ή ν”„λ ˆμž„μ›Œν¬μ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ SendPing ν•¨μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€.
    */
    serverError := client.SendPing(time.Second * 2)
    
    if serverError != nil {
            log.Fatal(serverError)
    }
}

πŸ“‚ Updates

  • v1.0.1
    • Server/Client Socket Option ꡬ쑰체
    • EventListener interface μ •μ˜
    • 예제 μž‘μ„±
    • Server/Client Logic μ •μ˜
    • goroutine sync 지원
    • session 지원
  • v1.0.2
    • Json 기반 톡신 지원
  • v1.0.3
    • Bootꡬ쑰체에 λ³΅ν•©μ„œλ²„ 지원여뢀 μΆ”κ°€
    • OnClose 콜백 ν•¨μˆ˜λ‘œ μ˜€λŠ” μΈμžκ°’μ„ Messageμ—μ„œ error둜 λ³€κ²½
    • μ„œλ²„ μ½”λ“œ λ‚΄λΆ€ 둜직 μˆ˜μ •
  • v1.0.4
    • 각 ν”„λ‘μ‹œκ°„ μ‹λ³„μžλ₯Ό μΆ”κ°€ base.Message.Key둜 μ‚¬μš©κ°€λŠ₯
    • Session κ΅¬ν˜„ μ±…μž„μ„ μžμ‹ λͺ¨λ“ˆλ‘œ λ„˜κΉ€
    • SocketMessage μΆ”κ°€
    • session.goμ—μ„œ μ—°κ²°λœ λͺ¨λ“ˆλ“€ ν‚€ 쑰회 κ°€λŠ₯ (μ„Έμ…˜ κ΅¬ν˜„μ€ μžμ‹λͺ¨λ“ˆμ—μ„œ 해야함)

πŸ™‹β€ 개발자

λ‚¨λŒ€μ˜ - wsnam0507@gmail.com