Trong mỗi role, sự kiện được cài đặt bằng các trường dữ liệu tĩnh còn hành động bằng phương thức tĩnh (Hình 4.8) Mỗi khi role agent chọn thực hiện một hành động bằng cách gọi phương thức tương ứng của role, một instance RoleAction sẽ được tạo ra. Tuy nhiên, hành động được lựa chọn chỉ có thể thực sự được thực thi khi role agent gọi phương thức doAction của giao diện RoleRegistration. Sau đó,
khi Server agent (agent có nhiệm vụ quản lý các role và role agent) nhận được yêu cầu thực hiện hành động thông qua tầng wrapper, agent này sẽ dịch hành động thành một sự kiện (thuộc lớp RoleEvent).
if (!permissionMatrix.checkPermission(sender.getRole(), addressee.getRole()))
throw new RoleException(RoleException.NOT_ALLOWED);
RoleMsg msgR = new RoleMsg(addresseeID, new RoleEvent(action .getName(), senderID, sender.getRole(),
action.getContent()));
Đầu tiên, Server agent sẽ kiểm tra quyền tương tác giữa role gửi và role nhận. Nếu tương tác không được cho phép, gửi thông báo tương tác không được phép (NOT_ALLOWED) tới role gửi. Ngược lại, tiến hành dịch một hành động thành sự kiện tương ứng bằng đoạn mã dưới đây:
new RoleEvent(action.getName(),senderID,sender.getRole(), action.getContent()));
Cuối cùng, Server agent gửi sự kiện vừa tạo ra tới role agent nhận. Các role agent luôn đợi các sự kiện đến bằng cách gọi thực hiện phương thức listen của giao diện RoleRegistration. Khi sự kiện đến, phương thức listen sẽ trả về một instance của lớp RoleEvent và sau đó agent sẽ đánh giá xem sự kiện này có nằm trong số các sự kiện mà nó có thể nhận biết hay không nhờ phương thức match của lớp
KnownEvent.
public boolean match(RoleEvent event) {
return name.equals(event.getName()) && senderRole.equals(event.getSenderRole()) &&
( (contentClass==null && event.getContent()==null) || (contentClass!=null &&
contentClass.isInstance(event.getContent())) ); }
Phương thức match này so sánh các sự kiện đã biết (thể hiện của lớp
KnowEvent) với sự kiện vừa xảy ra (thể hiện của lớp RoleEvent). Nếu trùng tên, trùng địa chỉ bên gửi và nội dung thông tin thì sự kiện vừa nhận được thuộc tầm quản lý của role đó. Khi đó, role sẽ lấy thông tin từ sự kiện để xử lý.