private void StoreArchiveID(Logger logger, OpenTokSDK.Archive archive)
        {
            var blobName = "openTokArchives";
            List <OpenTokSDK.Archive> archives = new List <OpenTokSDK.Archive>();

            // Get an instance of the blob storage to store the session data
            CloudBlobContainer container = Storage.GetCloudBlobContainer("opentok-container");

            logger.Log("Blob container created if it does not exist: " + container.CreateIfNotExistsAsync().Result.ToString());

            string archiveBlobs = Storage.GetBlob(blobName, "opentok-container");

            if (archiveBlobs.StartsWith('['))
            {
                archives = JsonConvert.DeserializeObject <List <OpenTokSDK.Archive> >(archiveBlobs);
            }
            else if (archiveBlobs.StartsWith('{'))
            {
                archives.Add(JsonConvert.DeserializeObject <OpenTokSDK.Archive>(archiveBlobs));
            }

            if (archives.Where(s => s.Id == archive.Id).Any())
            {
                var archiveJsonFormatted = JsonConvert.SerializeObject(archives.Where(s => s.Id == archive.Id).FirstOrDefault(), Formatting.Indented);
                logger.Log("OpenTok archive already exist: " + archiveJsonFormatted);
            }
            else
            {
                // Add the session to the blobs to be uploaded
                archives.Add(archive);

                logger.Log("OpenTok Archive created with session ID: " + archive.SessionId);
                logger.Log("OpenTok Archive created with archive ID: " + archive.Id);
                logger.Log("OpenTok Archive object: " + JsonConvert.SerializeObject(archive, Formatting.Indented));

                NexmoApi.StoreOpenTokData("opentok-container", logger, JsonConvert.SerializeObject(archives), blobName);
            }
        }
        public string CreateSession()
        {
            // create a logger placeholder
            Logger logger = null;

            var httpRequest               = new HttpRequestMessage();
            var value                     = string.Empty;
            var blobName                  = "openTokSessions";
            var sessionName               = new SessionName();
            var sessionExist              = false;
            var clientSession             = new ClientSession();
            List <ClientSession> sessions = new List <ClientSession>();

            var apiKey    = configuration["appSettings:OT.Api.Key"];
            var apiSecret = configuration["appSettings:OT.Api.Secret"];

            var openTok = new OpenTok(Convert.ToInt32(apiKey), apiSecret);

            try
            {
                logger = NexmoLogger.GetLogger("OTSessionLogger");
                logger.Open();

                // Get the session name out of the request body
                using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
                {
                    value       = reader.ReadToEndAsync().Result;
                    sessionName = JsonConvert.DeserializeObject <SessionName>(value);
                    logger.Log("OpenTok Session Creation Request body: " + value);
                }

                // Check if the session name already exists
                // Get an instance of the blob storage to store the session data
                CloudBlobContainer container = Storage.GetCloudBlobContainer("opentok-container");
                logger.Log("Blob container created if it does not exist: " + container.CreateIfNotExistsAsync().Result.ToString());

                string sessionBlobs = Storage.GetBlob(blobName, "opentok-container");
                if (sessionBlobs.StartsWith('['))
                {
                    sessions = JsonConvert.DeserializeObject <List <ClientSession> >(sessionBlobs);
                }
                else if (sessionBlobs.StartsWith('{'))
                {
                    sessions.Add(JsonConvert.DeserializeObject <ClientSession>(sessionBlobs));
                }

                if (sessions.Count > 0)
                {
                    foreach (ClientSession sessionBlob in sessions)
                    {
                        if (sessionBlob.Name == sessionName.Name)
                        {
                            sessionExist  = true;
                            clientSession = sessionBlob;

                            // Create an opentok token
                            clientSession.Token = openTok.GenerateToken(sessionBlob.Id);

                            var clientSessionJsonFormatted = JsonConvert.SerializeObject(clientSession, Formatting.Indented);
                            logger.Log("OpenTok Client Session already exist: " + clientSessionJsonFormatted);
                        }
                    }
                }

                if (!sessionExist)
                {
                    // Create an opentok session
                    var session = openTok.CreateSession("", MediaMode.ROUTED, ArchiveMode.MANUAL);

                    clientSession.ApiKey      = session.ApiKey.ToString();
                    clientSession.ApiSecret   = session.ApiSecret;
                    clientSession.ArchiveMode = session.ArchiveMode.ToString();
                    clientSession.Id          = session.Id;
                    clientSession.Location    = session.Location;
                    clientSession.MediaMode   = session.MediaMode.ToString();
                    clientSession.Name        = sessionName.Name;
                    // Create an opentok token
                    clientSession.Token = session.GenerateToken();

                    // Add the session to the blobs to be uploaded
                    sessions.Add(clientSession);

                    logger.Log("OpenTok Session created with session ID: " + session.Id);
                    logger.Log("OpenTok Session object: " + JsonConvert.SerializeObject(session, Formatting.Indented));
                    logger.Log("OpenTok Client Session Object generated with token: " + JsonConvert.SerializeObject(clientSession, Formatting.Indented));

                    NexmoApi.StoreOpenTokData("opentok-container", logger, JsonConvert.SerializeObject(sessions), blobName);
                }


                var clientSessionJson = JsonConvert.SerializeObject(clientSession);
                return(clientSessionJson);
            }
            catch (Exception e)
            {
                logger.Log("OpenTok Error creating a session: " + e.Message);
                logger.Log("OpenTok Error creating a session: " + e.StackTrace);

                return(e.Message);
            }
        }