Avatar
0
Vu Luong Anh Pundit
Cách test MMORoom
https://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.
  2. Với vòng lặp vô hạn ở MMORoom, mình viết unit test kiểu gì vậy ạ?
  3. 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 Enlightened
tvd12 Enlightened
  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 Enlightened
monkey Enlightened
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);
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