public PoroServer(PoroServerSettings settings) { _settings = settings; //Create the Authentication Server to handle login requests and client page _auth = new AuthServer(HandleWebServ, _settings.AuthLocations); //Load the certificate store for the RTMPS server var certificateStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine); certificateStore.Open(OpenFlags.MaxAllowed); //Remove last certificate in case it wasn't deleted on close foreach (var cert in certificateStore.Certificates) { if (cert.IssuerName.Name == string.Format("CN={0}", _settings.RTMPSHost)) { certificateStore.Remove(cert); } } //Generate new certificate for this run and add it to the store. var _rtmpsCert = CertGen.CreateSelfSignedCertificate(_settings.RTMPSHost); certificateStore.Add(_rtmpsCert); certificateStore.Close(); //Generate the SerializationContext _context = new SerializationContext(); var structures = Assembly.GetExecutingAssembly().GetTypes().Where(x => String.Equals(x.Namespace, "PoroLib.Structures", StringComparison.Ordinal)); foreach (Type ObjectType in structures) { _context.Register(ObjectType); } //Create the RTMPS server with the context and certificate _server = new RtmpServer(new IPEndPoint(IPAddress.Parse(_settings.RTMPSHost), _settings.RTMPSPort), _context, _rtmpsCert); _server.ClientCommandReceieved += ClientCommandReceieved; _server.ClientMessageReceived += ClientMessageReceived; //Set up the handler _handler = new MessageHandler(); _handler.Register("LoginService"); _handler.Register("MatchmakerService"); _handler.Register("ClientFacadeService"); _handler.Register("InventoryService"); _handler.Register("MasteryBookService"); _handler.Register("SummonerRuneService"); _handler.Register("PlayerPreferencesService"); _handler.Register("LcdsGameInvitationService"); _handler.Register("SummonerTeamService"); //Set up the forwarder _forwarder = new MessageForwarder(_context); //Set up the property redirector _redirector = new PropertyRedirector(_settings); //Set up the data loader _data = new DataLoader(); _redirector.PatcherFound += new PropertyRedirector.PatcherFoundHandler(_data.LoadData); //Set up the user server _users = new UserHandler(); }
public async Task <object> HandleWebServ(HttpListenerRequest request) { if (request.RawUrl.Contains("login-queue")) { return("{\"status\":\"LOGIN\"}"); } else if (request.RawUrl.StartsWith("/api")) { return(await HandleAPI(request)); } else { string ReadURL = request.RawUrl; if (ReadURL == "/") { ReadURL = "/index.html"; } if (ReadURL == "/favicon.ico") { return(""); } string ContentType = AuthServer.SetContentType(request.RawUrl); string RequestedFile = ReadURL.Split('/').Last(); #if !FILESYSTEM using (var db = new LiteEngine("poro.dat")) { var file = db.FileStorage.FindById(RequestedFile); if (file == null) { return("404"); } var stream = file.OpenRead(); using (var memoryStream = new MemoryStream()) { stream.CopyTo(memoryStream); byte[] bytes = memoryStream.ToArray(); if (ContentType.StartsWith("image")) { return(bytes); } else { return(Encoding.Default.GetString(bytes)); } } } #endif #if FILESYSTEM //Uncomment to create poro.dat /*var x = File.OpenRead(FileURL); * using (var db = new LiteEngine("poro.dat")) * { * var file = db.FileStorage.FindById(RequestedFile); * * if (file == null) * { * db.FileStorage.Upload(RequestedFile, x); * } * }*/ string FileURL = string.Format("app/web{0}", ReadURL); if (ContentType.StartsWith("image")) { return(File.ReadAllBytes(FileURL)); } else { return(File.ReadAllText(FileURL)); } #endif } }