Diarkis Room を使って別のサーバにあるルームのプロパティを操作する方法

Diarkis は並列分散しているため、必ずしも同じサーバにルームがあるとは限りません。ここでは、別のサーバにあるルームのプロパティの操作について説明します。

リモート Room のプロパティを更新する方法

Diarkis の内部通信機構であるメッシュを利用することで、リモート Room のプロパティを読み込んだり、更新したりすることができます。

対象となる Room があるサーバノードへのアップデートコマンドの送信

addrlist, err := room.GetRoomNodeAddressList(roomID)
  if err != nil {
    // Handle error
    return
  }
  req := make(map[string]interface{})
  req["roomID"] = roomID
  addr := addrlist[0] // the rest in the array are the backups
  mesh.SendRequest(cmdID, addr, req, func(err error, res map[string]interface{}) {
    if err != nil {
      // Handle error
      return
    }
    // Remote room property updated successfully
})

リモート・ サーバ・ノードでのロジックの更新

// This sets up handleRemoteRoomPropUpdate function to be invoked when mesh.SendRequest sends

// the command message as shown above

mesh.Command(cmdID, handleRemoteRoomPropUpdate)

func handleRemoteRoomPropUpdate(req map[string]interface{}) (error, map[string]interface{}) {
  roomID := mesh.GetString(req, "roomID")
  var err error
  _ := room.UpdateProperties(roomID, func(props map[string]interface{}) bool {
    if _, ok := props["booked"]; !ok {
      props["booked"] = true
      // Booked the room successfully
      return true
    }
    // The room has already been booked...
    err = errors.New("Room has already been booked")
    return false
  })
  res := make(map[string]interface{})
  return res, err
}

最終更新