示例#1
0
        public void SendClusterStatsRequest(int clusterId, int topicId)
        {
            if (peer == null || peer.PeerState != PeerStateValue.Connected)
            {
                return;
            }

            peer.OpCustom((byte)DiscussionOpCode.ClusterStatsRequest,
                          ClusterStatsRequest.Write(clusterId, topicId),
                          true);
        }
示例#2
0
        public void HandleClusterStatsRequest(LitePeer peer,
                                              OperationRequest operationRequest,
                                              SendParameters sendParameters)
        {
            var req = ClusterStatsRequest.Read(operationRequest.Parameters);

            var resp = default(ClusterStatsResponse);

            //cluster is under rebuild
            if (!_topology.ReportCluster(req.clusterId, out resp))
            {
                _room.Broadcast(peer,
                                (Dictionary <byte, object>)null,
                                sendParameters,
                                (byte)DiscussionEventCode.ClusterStatsEvent,
                                BroadcastTo.RoomAll);
                return;
            }

            resp.clusterTextTitle = "<No text name " + req.clusterId + ">";
            resp.topicId          = req.topicId;

            //get cluster shape
            var clusterSh = _doc.TryGetShape(resp.clusterId);

            if (clusterSh == null)
            {
                _room.Broadcast(peer,
                                (Dictionary <byte, object>)null,
                                sendParameters,
                                (byte)DiscussionEventCode.ClusterStatsEvent,
                                BroadcastTo.RoomAll);
                return;
            }


            resp.clusterShId      = clusterSh.Id();
            resp.clusterTextTitle = TryGetTextCaption(clusterSh); //get text caption shape id
            resp.initialOwnerId   = clusterSh.InitialOwner();

            //badge id -> arg.point id
            var clusteredPoints = new List <int>();

            for (int i = 0; i < resp.points.Length; i++)
            {
                var apId = BadgeShapeIdToArgPointId(resp.points[i]);
                if (apId != -1)
                {
                    clusteredPoints.Add(apId);
                }
            }

            if (clusteredPoints.Count() == 0)
            {
                _room.Broadcast(peer,
                                (Dictionary <byte, object>)null,
                                sendParameters,
                                (byte)DiscussionEventCode.ClusterStatsEvent,
                                BroadcastTo.RoomAll);
            }
            else
            {
                resp.points = clusteredPoints.ToArray();
                _room.Broadcast(peer,
                                resp.ToDict(),
                                sendParameters,
                                (byte)DiscussionEventCode.ClusterStatsEvent,
                                BroadcastTo.RoomAll);
            }
        }
示例#3
0
 public Task <ClusterStatsResponse> StatsAsync(ClusterStatsRequest request, CancellationToken cancellationToken = default)
 {
     request.BeforeRequest();
     return(DoRequestAsync <ClusterStatsRequest, ClusterStatsResponse>(request, cancellationToken));
 }
示例#4
0
 public ClusterStatsResponse Stats(ClusterStatsRequest request)
 {
     request.BeforeRequest();
     return(DoRequest <ClusterStatsRequest, ClusterStatsResponse>(request));
 }