public static VidyoConversation CreateVideoConversation(VideoConversationInitializationParameters parameters) { using (Trace.Config.scope()) { try { // Initialize the conversation object var conversation = new VidyoConversation { ScopedQueueName = parameters.ScopedQueueName, Room = VidyoServiceClient.CreateRoom(), InitializationParameters = parameters }; // Commit the conversation Save(conversation); return(conversation); } catch (Exception ex) { Trace.WriteEventError(ex, "Error in CreateConversation: " + ex.Message, EventId.GenericError); return(null); } } }
public static void RemoveConversation(VidyoConversation conversation) { using (Trace.Config.scope()) { try { lock (ConversationLocker) { if (Conversations.Contains(conversation)) { Trace.Config.note("Removing conversation {}" + conversation.ConversationId); Conversations.Remove(conversation); Delete(conversation.ConversationId.ToString()); } else { Trace.Config.warning( "Unable to remove conversation {} because it does not exist in the list.", conversation.ConversationId); } } } catch (Exception ex) { Trace.WriteEventError(ex, "Error in RemoveConversation: " + ex.Message, EventId.GenericError); } } }
public static void Save(VidyoConversation conversation) { using (Trace.Config.scope()) { try { // Create path var filename = Path.Combine(ConversationFilePath, conversation.ConversationId.ToString()) + ".conversation"; // Save file Trace.Config.always("Saving conversation {} to as {}", conversation.ConversationId, filename); // Lock on the filename to prevent multiple saves to the same file at the same time lock (conversation.WriteLocker) { Trace.Config.verbose("Filename lock obtained: {}", filename); // Add to list if not already there if (!Conversations.Contains(conversation)) { Conversations.Add(conversation); } // Write file using (var fs = File.Open(filename, FileMode.Create, FileAccess.Write, FileShare.None)) using (var sw = new StreamWriter(fs)) using (var jw = new JsonTextWriter(sw)) { jw.Formatting = Formatting.Indented; //Serializer.Serialize(jw, conversation); //var p = JsonConvert.SerializeObject(conversation.InitializationParameters, Formatting.Indented, new JsonSerializerSettings //{ // ReferenceLoopHandling = ReferenceLoopHandling.Serialize, // PreserveReferencesHandling = PreserveReferencesHandling.Objects //}); var data = JsonConvert.SerializeObject(conversation, Formatting.Indented, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Serialize, PreserveReferencesHandling = PreserveReferencesHandling.Objects }); jw.WriteRawValue(data); } Trace.Config.always("Conversation {} saved", conversation.ConversationId); } } catch (Exception ex) { Trace.WriteEventError(ex, "Error in Save: " + ex.Message, EventId.GenericError); } } }