public async Task AddMessage(IRceMessage message) { var database = _mongoClient.GetDatabase(DatabaseName); if (message is IHasWorkerId hasWorkerId) { if (await IsDisconnected(hasWorkerId.WorkerId)) { throw new Exception("Worker disconnected"); } if (await IsRegistered(hasWorkerId.WorkerId) == false && message is WorkerAddedMessage == false) { throw new Exception("Specified worker does not exist"); } if (message is WorkerAddedMessage workerAddedMessage) { var ownersCollection = database.GetCollection <BsonDocument>(OwnersCollectionName); await ownersCollection.InsertManyAsync(workerAddedMessage.Owners.Select(e => new BsonDocument { { OwnerFieldName, e }, { WorkerIdFieldName, workerAddedMessage.WorkerId.ToString() } })); } var owners = await GetOwners(hasWorkerId.WorkerId) ?? new List <string>(); await _rceHubContext.Clients.Users(owners).MessageReceived(message); } var messagesCollection = database.GetCollection <dynamic>(MessagesCollectionName); await messagesCollection.InsertOneAsync(message.ToExpandoObject()); }
public static ExpandoObject ToExpandoObject(this IRceMessage rceMessage) { var data = JsonConvert.SerializeObject(rceMessage); return(JsonConvert.DeserializeObject <ExpandoObject>(data, new ExpandoObjectConverter())); }