Ejemplo n.º 1
0
        public async Task PropagateChange(EmergencyObjectMessage data)
        {
            var access = data.header.Access;
            var owner  = data.header.createdBy;

            Parallel.ForEach(activeWebsockets, async(ws) =>
            {
                if (ws.ws.State == WebSocketState.Open)
                {
                    if (ws.endpoint.uid == owner)
                    {
                        /* Owner will receive all data regardless of access control list */
                        var sendObject = data.Copy <EmergencyObjectMessage>();
                        await sendObjectToWebsocket(ws.ws, sendObject);
                    }
                    else
                    {
                        /* Get allowed Paths for this user and reduce object to allowed paths */
                        var paths = objectService.GetAccessPaths(Models.AccessLevelEnum.Read, data, ws.endpoint);
                        if (paths != null && paths.Count > 0)
                        {
                            var sendObject  = data.Copy <EmergencyObjectMessage>();
                            sendObject.data = objectService.RemoveUnallowedPaths <object>(paths, sendObject.data, data.partPath);
                            await sendObjectToWebsocket(ws.ws, sendObject);
                        }
                    }
                }
            });
        }
Ejemplo n.º 2
0
 private void removeHeadersNotToBeSent(EmergencyObjectMessage sendObject)
 {
     sendObject.header.created       = null;
     sendObject.header.createdBy     = null;
     sendObject.header.lastUpdated   = null;
     sendObject.header.lastUpdatedBy = null;
     sendObject.header.Access        = null;
 }
Ejemplo n.º 3
0
        private async Task sendObjectToWebsocket(WebSocket ws, EmergencyObjectMessage sendObject)
        {
            removeHeadersNotToBeSent(sendObject);

            var jsonData       = JsonConvert.SerializeObject(sendObject);
            var jsonDataBinary = Encoding.UTF8.GetBytes(jsonData);

            await ws.SendAsync(new ArraySegment <byte>(jsonDataBinary), WebSocketMessageType.Text, true, CancellationToken.None);
        }
Ejemplo n.º 4
0
        public void ObjectChanged(Guid uid, MessageSentTrigger trigger, EmergencyObject edxo, object subData, string subPath = null)
        {
            var eventMsg = new EmergencyObjectMessage()
            {
                uid            = uid,
                header         = edxo.header,
                messageTrigger = trigger,
            };

            if (subPath != null)
            {
                eventMsg.isParted = true;
                eventMsg.partPath = subPath;
                eventMsg.data     = subData;
            }
            else
            {
                eventMsg.isParted = false;
                eventMsg.data     = edxo.data;
            }

            ws.PropagateChange(eventMsg);
        }