모든 사용자가 음성으로 말하고 사용할 수있는 음성 회의실을 만들려고합니다. 하지만 관리자로서 모든 사용자를 음소거 할 수있는 특권이 있어야합니다. 그래서, 나는 클라이언트 측에서 체크인하고 그에 따라 사용자의 마이크를 활성화/비활성화 할 마이크 속성을 사용자에게 추가합니다. 서버 측 코드는 다음과 같습니다.Red5 SharedObject 클로징 스트림 업데이트
String identifier;
String userID;
private int _gId = 1;
private Map<String,Object> newUser;
@Override
public boolean appConnect(IConnection conn, Object[] params) {
identifier = (String)params[1];
userID = (String)params[0];
int _globalUserId = _gId++;
conn.getClient().setAttribute("id", _globalUserId);
newUser = new HashMap<String,Object>();
newUser.put("identifier", (String)params[0]);
newUser.put("mic", 1); //mic value to be checked in client side
return true;
}
@Override
public boolean roomJoin(IClient client, IScope scope) {
ISharedObject so = getSharedObject(scope, "users_so");
so.setAttribute(userID,newUser);
return true;
}
@SuppressWarnings("unchecked")
public void muteUser(String userID){
IScope scope = Red5.getConnectionLocal().getScope();
ISharedObject so = getSharedObject(scope, "users_so");
Map<String,Object> user= new HashMap<String,Object>();
user = (Map<String, Object>) so.getAttribute(userID);
if(user != null){
user.put("mic", 0);
so.beginUpdate();
boolean removed = so.removeAttribute(userID);
boolean updated = so.setAttribute(userID,user);
so.endUpdate();
log.info("Mic: " + user.get("mic"));
log.info("Removed: " + removed);
log.info("Updated: " + updated);
}
}
muteUser 메소드를 호출 할 때 문제가 발생합니다. Red5는 스트림이 폐쇄되었다고 말합니다. 나는 이것이 사용자의 속성을 제거하고 다시 추가 할 때 발생한다고 생각하지만 sharedObject의 마이크 값을 업데이트하는 다른 방법을 찾을 수 없습니다.
스트림을 잃지 않고 sharedObject를 업데이트하는 것이 좋습니다.
매우 흥미 롭습니다. ConcurrentHashMap을 생각한 적이 없습니다. 결과를 사용하여 다시 사용하도록 노력하겠습니다. –