Avatar
0
Vu Luong Anh Pundit
Cách test MMORoom
Em đang code cái MMORoomhttps://github.com/youngmonkeys/game-box/pull/2. Em có 1 số câu hỏi:

  1. NormalRoom, thằng playerManager là raw type, làm sao chuyển nó thành PlayerManager ở MMORoom.

  1. Với vòng lặp vô hạn ở MMORoom, mình viết unit test kiểu gì vậy ạ?

  1. Cái vòng lặp trong MMORoom có cần làm gì khác ngoài set cái nearby players không ạ?
  • Answer
game-box
Remain: 5
3 Answers
Avatar
tvd12 Pundit
tvd12 Pundit
  1. NormalRoom, thằng playerManager là raw type, làm sao chuyển nó thành PlayerManager ở MMORoom.

=> em cứ sử dụng playerManager, nhưng lúc lấy ra em ép kiểu về MMOPlayer nhé

  1. Với vòng lặp vô hạn ở MMORoom, mình viết unit test kiểu gì vậy ạ?

=> Thực tế thì mình sẽ dùng bến volatile active em nhé cod sẽ kiểu

while(active) {
  // do something
}

Mình có thể bố sung hàm destroy vào MMORoom để lúc nào remove cái room thì set cái active về false em nhé

  1. Cái vòng lặp trong MMORoom có cần làm gì khác ngoài set cái nearby players không ạ?

=> không và không nên em ạ

Chỉ ở cuối vòng lặp mình sẽ có một cái hàm nofify kiểu này:

private void notifyUpdateFinished() {
 eventListeners.forEach(it -> it.onRoomUpdated(MMORoom room))
}

em nhé

  • 0
  • Reply
Avatar
Em đọc thì thấy biến volatile sẽ được lưu trên main memory. Cho em hỏi main memory ở đây có phải RAM ko ạ? Và có phải mọi threads sẽ đều truy cập được biến này?
  • 0
  • Reply
Avatar
monkey Pundit
monkey Pundit
Memory là RAM em ạ, dùng từ main memory hơi khó hiểu. Trong java mỗi một thread sẽ dùng khoảng 2MB cho call stack, mình hay gọi là stack memory, có thể cái main memory là một đối tượng singleton ở bên trong máy ảo Java chẳng hạn, khi tạo một biến volatile boolean active = false thì ở bên trong máy ảo sẽ hoạt động kiểu này:

MainMemory.getInstance().setVolatile("MMORoom.active", false);

Còn khi while(active) sẽ được dịch kiểu này em ạ:

while(true) {
  while(!MainMemory.getInstance().getVolatile("MMORoom.active")) {
    wait(); // chờ cho đến khi nhận được thông báo từ thread khác
  }
}
  • 0
  • Reply