| using Apache.Geode.DotNetCore; |
| using GemFireSessionState.Models; |
| using Microsoft.AspNetCore.Mvc; |
| using System; |
| using System.Collections.Generic; |
| using System.Diagnostics; |
| using System.Linq; |
| using System.Text; |
| |
| namespace GemFireSessionState.Controllers |
| { |
| public class HomeController : Controller |
| { |
| private readonly Random rando = new Random(); |
| |
| private static Region region; |
| private static Cache gemfireCache; |
| private readonly List<string> sampleData = new List<string> { "Apples", "Apricots", "Avacados", "Bananas", "Blueberries", "Lemons", "Limes", "Mangos", "Oranges", "Pears", "Pineapples" }; |
| private static readonly string _regionName = "SteeltoeDemo"; |
| |
| public HomeController(PoolFactory poolFactory, Cache cache) |
| { |
| Console.WriteLine("HomeController constructor"); |
| if (region == null) |
| { |
| Console.WriteLine("Initializing stuff"); |
| InitializeGemFireObjects(poolFactory, cache); |
| } |
| Console.WriteLine("Leaving HomeController constructor"); |
| } |
| |
| public IActionResult Index() |
| { |
| return View(); |
| } |
| |
| public ActionResult GetCacheEntry() |
| { |
| Console.WriteLine("GetCacheEntry"); |
| string message; |
| try |
| { |
| //var cacheRegion = gemfireCache.GetRegion<string, string>(_regionName); |
| Console.WriteLine("Get from CacheRegion"); |
| Byte [] byteArray = region.GetByteArray("BestFruit"); |
| message = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length); |
| Console.WriteLine("Got from CacheRegion {0}", message); |
| } |
| catch (Exception ex) { message = null; }; |
| //catch (CacheServerException) |
| //{ |
| // message = "The region SteeltoeDemo has not been initialized in Gemfire.\r\nConnect to Gemfire with gfsh and run 'create region --name=SteeltoeDemo --type=PARTITION'"; |
| //} |
| //catch (Apache.Geode.Client.KeyNotFoundException) |
| //{ |
| // message = "Cache has not been set yet."; |
| //} |
| |
| ViewBag.Message = message; |
| |
| return View(); |
| } |
| |
| public ActionResult SetCacheEntry() |
| { |
| var bestfruit = sampleData.OrderBy(g => Guid.NewGuid()).First(); |
| |
| region.PutByteArray("BestFruit", |
| Encoding.UTF8.GetBytes($"{bestfruit} are the best fruit. Here's random id:{rando.Next()}")); |
| |
| return RedirectToAction("GetCacheEntry"); |
| } |
| |
| public ActionResult Reset() |
| { |
| //Session.Abandon(); |
| //Request.Cookies.Clear(); |
| //Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); |
| |
| //var cacheRegion = gemfireCache.GetRegion<string, string>(_regionName); |
| region.Remove("BestFruit"); |
| //cacheRegion = null; |
| return RedirectToAction("Index"); |
| } |
| |
| public IActionResult Privacy() |
| { |
| return View(); |
| } |
| |
| [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] |
| public IActionResult Error() |
| { |
| return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); |
| } |
| |
| private static void InitializeGemFireObjects(PoolFactory poolFactory, Cache cache) |
| { |
| Console.WriteLine("Create PoolFactory"); |
| gemfireCache = cache; |
| //gemfireCache.TypeRegistry.PdxSerializer = new ReflectionBasedAutoSerializer(); |
| |
| try |
| { |
| Console.WriteLine("Create Pool"); |
| // make sure the pool has been created |
| poolFactory.CreatePool("pool"); |
| } |
| catch (Exception ex) { }; |
| //catch (IllegalStateException e) |
| //{ |
| // // we end up here with this message if you've hit the reset link after the pool was created |
| // if (e.Message != "Pool with the same name already exists") |
| // { |
| // throw; |
| // } |
| //} |
| |
| Console.WriteLine("Create Cache RegionFactory"); |
| var regionFactory = gemfireCache.CreateRegionFactory(RegionShortcut.Proxy); |
| try |
| { |
| Console.WriteLine("Create CacheRegion"); |
| region = regionFactory.CreateRegion(_regionName); |
| Console.WriteLine("CacheRegion created"); |
| } |
| catch (Exception ex) { }; |
| //catch |
| //{ |
| // Console.WriteLine("Create CacheRegion failed... now trying to get the region"); |
| // cacheRegion = gemfireCache.GetRegion<string, string>(_regionName); |
| //} |
| } |
| } |
| } |