2011-09-12 1 views
1

나는 실시간 협업 스프레드 시트 ( https://github.com/omarbenhamid/Cloudsheet/blob/master/cloudsheet.opa 여기에 소스를) 만들 수 OPA를 평가 스프레드 시트OPA에서 다른 페이지의 Network.cloud ("키")를 여러 번 호출하면 다른 구름이 반환되는 이유는 무엇입니까? 내가 보는 모든 사용자에게 업데이트를 전달하기 위해 각 스프레드 시트에 대한 Network.cloud을 만들</p> <p>나는 사람들이 스프레드 시트에 실시간으로 calloborate 할 :

는 각 셀은 keyboard_update은 내가 다른 뷰어를 업데이트받을 수 있도록 스프레드 시트의 구름에 메시지를 방송 할 호출 될 때 <input type="text" onkeypress={event->keyboard_update(event,sheetname,row,column)}/>

입니다. 그러나 여기 내 문제 :

keyboard_update(event,sheetname,row,column) = (
    Network.broadcast({/*my update notif message*/}, Network.cloud(sheetname)) 
) 

이 단지 새로운 네트워크가 각 통화 Network.cloud 심지어 thow API의 문서에서 만든처럼 동작은 말한다 :

"하나 개 또는 여러 개의 서버가 네트워크를 호출합니다.

: 동일 k 값과 구름 (K), 하나의 네트워크는 실제로 내가 찾은

유일한 해결책은 인덱스에 글로벌 가변에 저장된 연관 목록에서 내 구름입니다 "작성

clouds = Mutable.make([] : list((string,Network.network(message)))) 

그리고 내 클라우드를 List.assoc을 사용하여 가져오고, 필요하면 색인에 추가하십시오 (소스 코드에서 getcloud 함수 참조).

왜 Network.broadcast의 매개 변수로 Network.cloud (sheetname)를 사용하는 첫 번째 방법이 잘못 되었습니까?

+0

그러나 멀티플 클라우드를 실제로 만들고 싶다면 최소한 특정 클라우드에 즉시 액세스 할 수있는 문자열 맵 (Network.network (message))을 사용해야합니다. – Fred

+0

API 문서를 읽었 기 때문에 맵을 사용하지 않았습니다. 문자열 맵은 불변입니다 : 불변의 데이터 구조입니다. 내가 오해 했니? –

+0

StringMap 또는 List를 Mutable으로 사용하는 것에 차이가 있다고 생각하지 않습니다. – Fred

답변

0

각 셀마다 새 클라우드를 만들어야한다고 생각하지 않습니다. 당신은 전체 문서에 대해 하나의 구름을 만들거나 어쩌면 웹 애플리케이션, 그리고이 보낸 메시지의 개의 다른 유형해야합니다

를 예를 들어 :

type cloud_message = { 
    sheet_name : string 
    row : int 
    col : int 
    content : string 
} 

을 그리고, 단지 리면에 한 번 클라우드를 만들 수준 :

@publish my_cloud = Network.cloud("my_cloud") : Network.network(cloud_message) 

그리고 마지막으로, 당신의 keyboard_update에, 전화 :

Network.broadcast({sheet_name=... row=... col=... content=...}, my_cloud) 
+0

사실, 셀마다 하나의 클라우드가 없지만 하나의 문서 당 하나의 클라우드입니다. 따라서 여러 개의 구름이 필요합니다. –

+0

네, Network.cloud가 새로운 클라우드를 생성하고 있다고 생각했습니다. 각 통화마다. 내 잘못이야. – Fred

관련 문제