~/goga/3-23/main.goは、~/go_template/tests/server23.go のサーバのクライアントです。ここでは、このクライアントとサーバのみに限定した使いかたを、備忘録として記載しておきます。
基本的には、PrumeMobileの使い方と同じです。
https://github.com/TomoichiEbata/PruneMobile
重複する部分もありますが以下に記載します
先ずグローバルに以下の構造体とグローバル変数を書き込みます。 ちなみに、これは~/go_template/tests/server23.go のサーバ 専用です(他のサーバでは、バスや乗客のアイコンが出てきません)
// GetLoc GetLoc
type GetLoc struct {
ID int `json:"id"`
Lat float64 `json:"lat"`
Lng float64 `json:"lng"`
TYPE string `json:"type"` // "USER","BUS","CONTROL
//Address string `json:"address"`
}
var addr = flag.String("addr", "0.0.0.0:8080", "http service address") // テスト
func main() {} には、何も記載しなくても良いです。
エージェント用スレッドに、全部以下の記載をします。エージェント単位毎に、作ります。通信はエージェント単位(goroutine単位)で発生しますが、100や1000くらいのエージェントなら問題なく動きます(多分10000でも大丈夫)。
で、書き方ですが、以下の透りにして下さい。
_ = websocket.Upgrader{} // use default options
flag.Parse()
log.SetFlags(0)
u := url.URL{Scheme: "ws", Host: *addr, Path: "/echo2"}
log.Printf("connecting to %s", u.String())
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
以下のコードでオブジェクトを生成します
// PruneMobileの初期化
// 豊洲
gl := GetLoc{
ID: 0, // "0"としなければならない
Lat: 35.65351932403455, // 初期の場所
Lng: 139.7945379819961,
TYPE: "PERSON", // "PERSON","BUS","CENTER"のいずれかが選べる
}
err = c.WriteJSON(gl)
if err != nil {
log.Println("write:", err)
}
gl2 := new(GetLoc)
err = c.ReadJSON(gl2)
gl.ID = gl2.ID
このループを連続して回すことでオブジェクトを動かします。
for i := 0; i < steps; i++ {
// 座標を適当に動かして、gl.Lat, gl.Lng に代入する
gl.Lat = person.present.lat
gl.Lng = person.present.lon
err = c.WriteJSON(gl)
if err != nil {
log.Println("write:", err)
}
gl2 := new(GetLoc)
err = c.ReadJSON(gl2)
time.Sleep(1 * time.Second) // 適当な待ち時間を置く
}
とりあえず、以下のように入力すると、オブジェクトを消せます。
gl.ID = gl2.ID
gl.Lat = 999.9
gl.Lng = 999.9
err = c.WriteJSON(gl)
err = c.ReadJSON(gl2)
$ go run server23.go
localhost:8080でブラウザを起動
$ go run main.go
~/go_template/tests/server23.go のサーバ は、アイコンのところだけコード変更しています。
if (obj.id == 0) {
if (obj.type == "PERSON"){
var marker = new PruneCluster.Marker(obj.lat, obj.lng, {
popup: "Bell 206 ",
icon: L.icon({
iconUrl: 'http://localhost:8080/static/person-icon.png',
})
});
}
else if (obj.type == "BUS"){
var marker = new PruneCluster.Marker(obj.lat, obj.lng, {
popup: "Bell 206 ",
icon: L.icon({
iconUrl: 'http://localhost:8080/static/bus-icon.png',
})
});
}