1. 本メモの使い方

~/goga/3-23/main.goは、~/go_template/tests/server23.go のサーバのクライアントです。ここでは、このクライアントとサーバのみに限定した使いかたを、備忘録として記載しておきます。

2. クライアントの作り方

基本的には、PrumeMobileの使い方と同じです。

https://github.com/TomoichiEbata/PruneMobile

重複する部分もありますが以下に記載します

2.1. Step.1 (グローバルに記載する)

先ずグローバルに以下の構造体とグローバル変数を書き込みます。 ちなみに、これは~/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") // テスト

2.2. Step.2

func main() {} には、何も記載しなくても良いです。

2.3. Step.3 (エージェント単位で記載する)

エージェント用スレッドに、全部以下の記載をします。エージェント単位毎に、作ります。通信はエージェント単位(goroutine単位)で発生しますが、100や1000くらいのエージェントなら問題なく動きます(多分10000でも大丈夫)。

で、書き方ですが、以下の透りにして下さい。

2.3.1. 通信コネクション確立

_ = 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()

2.3.2. エージェント用のオブジェクト生成方法

以下のコードでオブジェクトを生成します

// 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

2.3.3. エージェント用オブジェクトの動かし方

このループを連続して回すことでオブジェクトを動かします。

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) // 適当な待ち時間を置く }

2.3.4. エージェント用オブジェクトの消去方法

とりあえず、以下のように入力すると、オブジェクトを消せます。

gl.ID = gl2.ID gl.Lat = 999.9 gl.Lng = 999.9 err = c.WriteJSON(gl) err = c.ReadJSON(gl2)

3. 使い方

3.1. サーバの起動

$ go run server23.go

3.2. ブラウザの起動

localhost:8080でブラウザを起動

3.3. クライアントの起動

$ go run main.go

4. 表示例

その他

~/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', }) }); }