ソースを参照

simplify xbakes service

UbitUmarov 3 年 前
コミット
e169b1b074

+ 13 - 26
OpenSim/Server/Handlers/BakedTextures/XBakes.cs

@@ -26,15 +26,10 @@
  */
 
 using System;
-using System.Diagnostics;
-using System.Collections.Generic;
 using System.IO;
 using System.Text;
-using System.Threading;
 using System.Reflection;
 using OpenSim.Framework;
-using OpenSim.Framework.Console;
-using OpenSim.Server.Base;
 using OpenSim.Services.Base;
 using OpenSim.Services.Interfaces;
 using Nini.Config;
@@ -45,15 +40,10 @@ namespace OpenSim.Server.Handlers.BakedTextures
 {
     public class XBakes : ServiceBase, IBakedTextureService
     {
-        private static readonly ILog m_log =
-                LogManager.GetLogger(
-                MethodBase.GetCurrentMethod().DeclaringType);
+        private static readonly ILog m_log = LogManager.GetLogger( MethodBase.GetCurrentMethod().DeclaringType);
 
         protected string m_FSBase;
 
-        private System.Text.UTF8Encoding utf8encoding =
-                new System.Text.UTF8Encoding();
-
         public XBakes(IConfigSource config) : base(config)
         {
             MainConsole.Instance.Commands.AddCommand("fs", false,
@@ -67,8 +57,8 @@ namespace OpenSim.Server.Handlers.BakedTextures
                 throw new Exception("No BakedTextureService configuration");
             }
 
-            m_FSBase = assetConfig.GetString("BaseDirectory", String.Empty);
-            if (m_FSBase == String.Empty)
+            m_FSBase = assetConfig.GetString("BaseDirectory", string.Empty);
+            if (m_FSBase == string.Empty)
             {
                 m_log.ErrorFormat("[BAKES]: BaseDirectory not specified");
                 throw new Exception("Configuration error");
@@ -77,24 +67,21 @@ namespace OpenSim.Server.Handlers.BakedTextures
             m_log.Info("[BAKES]: XBakes service enabled");
         }
 
-        public string Get(string id)
+        public byte[] Get(string id)
         {
             string file = HashToFile(id);
             string diskFile = Path.Combine(m_FSBase, file);
 
-            if (File.Exists(diskFile))
+            try
+            {
+                byte[] content = File.ReadAllBytes(diskFile);
+
+                return content;
+            }
+            catch
             {
-                try
-                {
-                    byte[] content = File.ReadAllBytes(diskFile);
-
-                    return utf8encoding.GetString(content);
-                }
-                catch
-                {
-                }
             }
-            return String.Empty;
+            return new byte[0];
         }
 
         public void Store(string id, string sdata)
@@ -106,7 +93,7 @@ namespace OpenSim.Server.Handlers.BakedTextures
 
             File.Delete(diskFile);
 
-            byte[] data = utf8encoding.GetBytes(sdata);
+            byte[] data = Encoding.UTF8.GetBytes(sdata);
 
             using (FileStream fs = File.Create(diskFile))
                 fs.Write(data, 0, data.Length);

+ 0 - 71
OpenSim/Server/Handlers/BakedTextures/XBakesGetHandler.cs

@@ -1,71 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of the OpenSimulator Project nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using Nini.Config;
-using log4net;
-using System;
-using System.IO;
-using System.Reflection;
-using System.Net;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Xml;
-using System.Xml.Serialization;
-using OpenSim.Server.Base;
-using OpenSim.Services.Interfaces;
-using OpenSim.Framework;
-using OpenSim.Framework.ServiceAuth;
-using OpenSim.Framework.Servers.HttpServer;
-
-namespace OpenSim.Server.Handlers.BakedTextures
-{
-    public class BakesServerGetHandler : BaseStreamHandler
-    {
-//        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
-        private IBakedTextureService m_BakesService;
-        private System.Text.UTF8Encoding utf8 =
-                new System.Text.UTF8Encoding();
-
-        public BakesServerGetHandler(IBakedTextureService service, IServiceAuth auth) :
-                base("GET", "/bakes", auth)
-        {
-            m_BakesService = service;
-        }
-
-        protected override byte[] ProcessRequest(
-            string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
-        {
-            string[] p = SplitParams(path);
-
-            if (p.Length == 0)
-                return new byte[0];
-
-            return utf8.GetBytes(m_BakesService.Get(p[0]));
-        }
-    }
-}

+ 71 - 10
OpenSim/Server/Handlers/BakedTextures/XBakesHandler.cs

@@ -26,6 +26,9 @@
  */
 
 using System;
+using System.IO;
+using System.Text;
+using System.Net;
 using Nini.Config;
 using OpenSim.Server.Base;
 using OpenSim.Services.Interfaces;
@@ -37,33 +40,91 @@ namespace OpenSim.Server.Handlers.BakedTextures
 {
     public class XBakesConnector : ServiceConnector
     {
-        private IBakedTextureService m_BakesService;
         private string m_ConfigName = "BakedTextureService";
 
         public XBakesConnector(IConfigSource config, IHttpServer server, string configName) :
                 base(config, server, configName)
         {
-            if (configName != String.Empty)
+            if (configName != string.Empty)
                 m_ConfigName = configName;
 
             IConfig serverConfig = config.Configs[m_ConfigName];
             if (serverConfig == null)
                 throw new Exception(String.Format("No section '{0}' in config file", m_ConfigName));
 
-            string assetService = serverConfig.GetString("LocalServiceModule",
-                    String.Empty);
+            string bakesServiceName = serverConfig.GetString("LocalServiceModule", string.Empty);
 
-            if (assetService == String.Empty)
+            if (string.IsNullOrWhiteSpace(bakesServiceName))
                 throw new Exception("No BakedTextureService in config file");
 
-            Object[] args = new Object[] { config };
-            m_BakesService =
-                    ServerUtils.LoadPlugin<IBakedTextureService>(assetService, args);
+            object[] args = new object[] { config };
+            IBakedTextureService bakesService = ServerUtils.LoadPlugin<IBakedTextureService>(bakesServiceName, args);
 
             IServiceAuth auth = ServiceAuth.Create(config, m_ConfigName);
 
-            server.AddStreamHandler(new BakesServerGetHandler(m_BakesService, auth));
-            server.AddStreamHandler(new BakesServerPostHandler(m_BakesService, auth));
+            server.AddSimpleStreamHandler(new BakesServerHandler(bakesService, auth), true);
+        }
+    }
+
+    public class BakesServerHandler : SimpleStreamHandler
+    {
+        private IBakedTextureService m_BakesService;
+
+        public BakesServerHandler(IBakedTextureService service, IServiceAuth auth) :
+                base("/bakes", auth)
+        {
+            m_BakesService = service;
+        }
+
+        protected override void ProcessRequest(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
+        {
+            if(m_BakesService == null)
+            {
+                httpResponse.StatusCode = (int)HttpStatusCode.InternalServerError;
+                return;
+            }
+            switch (httpRequest.HttpMethod)
+            {
+                case "GET":
+                    doGet(httpRequest, httpResponse);
+                    break;
+                case "POST":
+                    doPost(httpRequest, httpResponse);
+                    break;
+                default:
+                    httpResponse.StatusCode = (int)HttpStatusCode.MethodNotAllowed;
+                    return;
+            }
+            httpResponse.StatusCode = (int)HttpStatusCode.OK;
+        }
+
+        private void doGet(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
+        {
+            string[] p = SplitParams(httpRequest.UriPath);
+            httpRequest.InputStream.Dispose();
+
+            if (p.Length == 0)
+                return;
+
+            httpResponse.RawBuffer = m_BakesService.Get(p[0]);
+        }
+
+        private void doPost(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
+        {
+            string[] p = SplitParams(httpRequest.UriPath);
+
+            if (p.Length == 0)
+                return;
+
+            using (StreamReader sr = new StreamReader(httpRequest.InputStream))
+                m_BakesService.Store(p[0], sr.ReadToEnd());
+            httpRequest.InputStream.Dispose();
+        }
+
+        public string[] SplitParams(string path)
+        {
+            string param = GetParam(path);
+            return param.Split(new char[] { '/', '?', '&' }, StringSplitOptions.RemoveEmptyEntries);
         }
     }
 }

+ 0 - 74
OpenSim/Server/Handlers/BakedTextures/XBakesPostHandler.cs

@@ -1,74 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of the OpenSimulator Project nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using Nini.Config;
-using log4net;
-using System;
-using System.Reflection;
-using System.IO;
-using System.Net;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Xml;
-using System.Xml.Serialization;
-using OpenSim.Server.Base;
-using OpenSim.Services.Interfaces;
-using OpenSim.Framework;
-using OpenSim.Framework.ServiceAuth;
-using OpenSim.Framework.Servers.HttpServer;
-
-namespace OpenSim.Server.Handlers.BakedTextures
-{
-    public class BakesServerPostHandler : BaseStreamHandler
-    {
-//        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
-        private IBakedTextureService m_BakesService;
-
-        public BakesServerPostHandler(IBakedTextureService service, IServiceAuth auth) :
-                base("POST", "/bakes", auth)
-        {
-            m_BakesService = service;
-        }
-
-        protected override byte[] ProcessRequest(
-            string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
-        {
-            string[] p = SplitParams(path);
-
-            if (p.Length == 0)
-            {
-                return new byte[0];
-            }
-
-            using(StreamReader sr = new StreamReader(request))
-                m_BakesService.Store(p[0],sr.ReadToEnd());
-
-            return new byte[0];
-        }
-    }
-}

+ 1 - 1
OpenSim/Services/Interfaces/IBakedTextureService.cs

@@ -32,7 +32,7 @@ namespace OpenSim.Services.Interfaces
 {
     public interface IBakedTextureService
     {
-        string Get(string id);
+        byte[] Get(string id);
         void Store(string id, string data);
     }
 }