protoevent
v1.0.0 Release
ProtoEvent は、Golang のイベントベースの TCP 接続処理ライブラリです。これはシンプルであり、新しいプロトコル接続を確立する基本機能をあまり活用していません。 ProtoEvent はnet.Listener
およびnet.Conn
インターフェイスを再実装し、ネットワーク通信で発生したさまざまなイベントをキャプチャする機能を拡張します。
十分に整理されていない単純なネットワーク アプリケーションのコードベースを管理する必要がある場合、結果としてより多くのスパゲッティ コードが生成されることになるのは、十分に苦痛です。少なくとも、特定のネットワーク イベントに基づいてアプリケーション ロジックを編成できるようになりました。
go get -u https://github.com/parinpan/protoevent
サーバー側アプリケーション:
package main
import (
"encoding/json"
"fmt"
"net"
"github.com/parinpan/protoevent"
)
type Message struct {
From string `json:"from"`
}
func main () {
servant , event , err := protoevent . CreateServant ( "tcp" , "0.0.0.0:8089" )
if nil != err {
panic ( err )
}
event . OnConnectionError ( func ( err error ) {
})
event . OnConnectionAccepted ( func ( conn net. Conn ) {
fmt . Println ( "Accepting new connection: " , conn . RemoteAddr ())
})
event . OnConnectionClosed ( func ( conn net. Conn ) {
})
event . OnReceiveMessageError ( func ( conn net. Conn , err error ) {
})
event . OnMessageReceived ( func ( conn net. Conn , message [] byte , rawMessage [] byte ) {
fmt . Println ( "Received a message: " , string ( message ))
var msg Message
_ = json . Unmarshal ( message , & msg )
// send a message back to client
sayHiMessage := fmt . Sprint ( "Hi " , msg . From , ". Welcome to ProtoEvent!" )
conn . Write ([] byte ( sayHiMessage ))
})
event . OnSendMessageError ( func ( conn net. Conn , message [] byte , err error ) {
})
event . OnMessageSent ( func ( conn net. Conn , message [] byte ) {
fmt . Println ( "Sent a message: " , string ( message ))
})
servant . SetDefaultReadSize ( 4096 ) // set default read size per chunk in bytes
servant . Serve ()
}
クライアント側アプリケーション:
package main
import (
"fmt"
"net"
"github.com/parinpan/protoevent"
)
func main () {
agent , event := protoevent . CreateAgent ( "tcp" , "0.0.0.0:8089" )
agent . SetDefaultReadSize ( 4096 ) // set default read size per chunk in bytes
event . OnConnectionError ( func ( err error ) {
})
event . OnConnectionAccepted ( func ( conn net. Conn ) {
fmt . Println ( "Accepting new connection: " , conn . RemoteAddr ())
})
event . OnConnectionClosed ( func ( conn net. Conn ) {
})
event . OnReceiveMessageError ( func ( conn net. Conn , err error ) {
})
event . OnMessageReceived ( func ( conn net. Conn , message [] byte , rawMessage [] byte ) {
fmt . Println ( "Received a message: " , string ( message ))
})
event . OnSendMessageError ( func ( conn net. Conn , message [] byte , err error ) {
})
event . OnMessageSent ( func ( conn net. Conn , message [] byte ) {
fmt . Println ( "Sent a message: " , string ( message ))
})
// trigger a message to get connected with the server at first
err := agent . Run ( func ( conn net. Conn ) error {
_ , err := conn . Write ([] byte ( `{"from": "AgentV1"}` ))
return err
})
if nil != err {
panic ( err )
}
}
お問い合わせがございましたら。次の情報を入手できます: