コード例 #1
0
ファイル: Preprocessor.cs プロジェクト: imintsystems/Kean
 Generic.IEnumerator<Dom.Node> LoadAll(Uri.Path path)
 {
     string platformPath = System.IO.Path.GetFullPath(path.FolderPath.PlatformPath);
     if (System.IO.Directory.Exists(platformPath))
         foreach (string file in System.IO.Directory.GetFiles(platformPath, path.Last.Head).Sort())
         {
             Dom.Document document = Dom.Document.Open(Uri.Locator.FromPlatformPath(file));
             if (document.NotNull() && document.Root.NotNull())
                 yield return document.Root;
         }
 }
コード例 #2
0
ファイル: Server.cs プロジェクト: imintsystems/Kean
		bool Start(Uri.Endpoint endPoint, Action<Action> run)
		{
			bool result;
			if (result = (this.tcpListener = this.Connect(endPoint)).NotNull())
			{
				this.Endpoint = endPoint;
				this.tcpListener.Start();
				run(() => 
				{
					try
					{
						this.OnConnect(Connection.Connect(this.tcpListener.AcceptTcpClient()));
					}
					catch (System.Net.Sockets.SocketException)
					{
						if (this.listener.NotNull())
							this.listener.Abort();
					}
				});
			}
			return result;
		}
コード例 #3
0
ファイル: Preprocessor.cs プロジェクト: imintsystems/Kean
 Generic.IEnumerator<Dom.Node> LoadAll(Uri.Locator locator)
 {
     return (locator.Scheme == "file" && locator.Authority == null) ? this.LoadAll(locator.Path) : this.Load(locator);
 }
コード例 #4
0
ファイル: Preprocessor.cs プロジェクト: imintsystems/Kean
 Generic.IEnumerator<Dom.Node> Load(Uri.Locator locator)
 {
     Dom.Document document = Dom.Document.Open(locator);
     if (document.NotNull() && document.Root.NotNull())
         yield return document.Root;
 }
コード例 #5
0
ファイル: Document.cs プロジェクト: imintsystems/Kean
		public bool Save(Uri.Locator resource)
		{
			using (IO.ICharacterWriter writer = IO.CharacterWriter.Create(resource))
				return this.Save(writer);
		}
コード例 #6
0
ファイル: Link.cs プロジェクト: imintsystems/Kean
		public Link(Uri.Locator locator) :
			this()
		{
			this.Locator = locator;
		}
コード例 #7
0
ファイル: ByteDevice.cs プロジェクト: imintsystems/Kean
		public static IByteDevice Open(System.Reflection.Assembly assembly, Uri.Path resource)
		{
			return new ByteDevice(assembly.GetManifestResourceStream(assembly.GetName().Name + ((string)resource).Replace('/', '.'))) {
				Resource = new Uri.Locator("assembly", assembly.GetName().Name, resource),
				FixedLength = true
			};
		}
コード例 #8
0
ファイル: ByteDevice.cs プロジェクト: imintsystems/Kean
		public static IByteDevice Open(Uri.Locator input, Uri.Locator output)
		{
			return ByteDeviceCombiner.Open(ByteDevice.Open(input), ByteDevice.Create(output));
		}
コード例 #9
0
ファイル: CharacterDevice.cs プロジェクト: imintsystems/Kean
		public static ICharacterDevice Create(Uri.Locator resource)
		{
			return CharacterDevice.Open(ByteDevice.Create(resource));
		}
コード例 #10
0
ファイル: Server.cs プロジェクト: imintsystems/Kean
		public static bool Run(Action<Connection> connected, Uri.Endpoint endPoint)
		{
			bool result;
			using (Server server = new Server(connected))
				result = server.Run(endPoint);
			return result;
		}
コード例 #11
0
ファイル: Server.cs プロジェクト: imintsystems/Kean
		public bool Start(Uri.Endpoint endPoint)
		{
			return this.Start(endPoint, action => this.listener = Parallel.RepeatThread.Start("TcpServer", action));
		}
コード例 #12
0
ファイル: Server.cs プロジェクト: imintsystems/Kean
		public static Server Start(Action<Connection> connected, Uri.Endpoint endPoint)
		{
			Server result = new Server(connected);
			if (!result.Start(endPoint))
			{
				result.Dispose();
				result = null;
			}
			return result;
		}
コード例 #13
0
ファイル: Server.cs プロジェクト: imintsystems/Kean
		System.Net.Sockets.TcpListener Connect(Uri.Endpoint endPoint)
		{
			System.Net.Sockets.TcpListener result = null;
			if (endPoint.Port.HasValue)
			{
				string host = endPoint.Host;
				if (host.NotEmpty())
				{
					System.Net.IPAddress address;
					if (System.Net.IPAddress.TryParse(host, out address))
						result = new System.Net.Sockets.TcpListener(address, (int)endPoint.Port.Value);
				}
				else
					result = new System.Net.Sockets.TcpListener(IPAddress.Any, (int)endPoint.Port.Value);
			}
			return result;
		}
コード例 #14
0
ファイル: Server.cs プロジェクト: imintsystems/Kean
		public bool Run(Uri.Endpoint endPoint)
		{
			return this.Start(endPoint, action => this.listener = Parallel.RepeatThread.Run(action));
		}
コード例 #15
0
ファイル: Device.cs プロジェクト: imintsystems/Kean
		protected Device(System.IO.Stream stream, Uri.Locator resource)
		{
			this.stream = stream;
			this.Resource = resource;
			this.Encoding = System.Text.Encoding.UTF8;
		}
コード例 #16
0
ファイル: Parser.cs プロジェクト: imintsystems/Kean
		public static Parser Open(System.Reflection.Assembly assembly, Uri.Path path)
		{
			return Parser.Open(IO.ByteDevice.Open(assembly, path));
		}
コード例 #17
0
ファイル: ByteDevice.cs プロジェクト: imintsystems/Kean
		public static IByteDevice Open(Uri.Locator resource)
		{
			return ByteDevice.Open(resource, System.IO.FileMode.Open);
		}
コード例 #18
0
ファイル: Parser.cs プロジェクト: imintsystems/Kean
		public static Parser Open(Uri.Locator resource)
		{
			return Parser.Open(IO.ByteDevice.Open(resource));
		}
コード例 #19
0
ファイル: ByteDevice.cs プロジェクト: imintsystems/Kean
		static IByteDevice Open(Uri.Locator resource, System.IO.FileMode mode)
		{
			IByteDevice result = null;
			if (resource.NotNull())
				switch (resource.Scheme)
				{
					case "assembly":
						result = resource.Authority == "" ? ByteDevice.Open(System.Reflection.Assembly.GetEntryAssembly(), resource.Path) : ByteDevice.Open(System.Reflection.Assembly.Load(new System.Reflection.AssemblyName(resource.Authority)), resource.Path);
						break;
					case "file":
						try
						{
							System.IO.FileStream stream = System.IO.File.Open(System.IO.Path.GetFullPath(resource.PlatformPath), mode, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite);
							if (stream.NotNull())
								result = new ByteDevice(stream) { Resource = resource, FixedLength = true }; 
						}
						catch (System.IO.DirectoryNotFoundException)
						{
							result = null;
						}
						catch (System.IO.FileNotFoundException)
						{
							result = null;
						}
						break;
					case "http":
					case "https":
						if (mode == System.IO.FileMode.Open)
						{
							try
							{
								using (System.Net.WebClient client = new System.Net.WebClient())
									result = new ByteDevice(new System.IO.MemoryStream(client.DownloadData(resource))) {
										Resource = resource,
										FixedLength = true
									};
							}
							catch (System.Net.WebException)
							{
								result = null;
							}
						}
						break;
				}
			return result;
		}
コード例 #20
0
ファイル: Parser.cs プロジェクト: imintsystems/Kean
 public static IDisposable Listen(object root, Uri.Locator resource)
 {
     IDisposable result = null;
     switch (resource.Scheme)
     {
         case "file":
             result = Parser.Read(root, resource);
             break;
         case "telnet":
             result = IO.Net.Tcp.ThreadedServer.Start(connection => new Parser(root, true, new Cli.VT100(new IO.Net.Telnet.Server(connection.ByteDevice))).Read(), resource.Authority.Endpoint);
             break;
         case "tcp":
             result = IO.Net.Tcp.ThreadedServer.Start(connection =>
             {
                 Cli.Terminal terminal = Cli.Terminal.Open(connection.ByteDevice);
                 if (terminal.NotNull())
                 {
                     terminal.NewLine = new char[] { '\r', '\n' };
                     new Parser(root, false, terminal).Read();
                 }
             }, resource.Authority.Endpoint);
             break;
         case "console":
             result = Parallel.Thread.Start("console", () => new Parser(root, true, new Cli.ConsoleTerminal()).Read());
             break;
         case "stdio":
             result = Parallel.Thread.Start("stdio", () => new Parser(root, false, Cli.Terminal.Open(IO.ByteDeviceCombiner.Open(Console.OpenStandardInput(), Console.OpenStandardOutput()))).Read());
             break;
     }
     return result;
 }
コード例 #21
0
ファイル: ByteDevice.cs プロジェクト: imintsystems/Kean
		public static IByteDevice Create(Uri.Locator resource)
		{
			IByteDevice result = ByteDevice.Open(resource, System.IO.FileMode.Create);
			if (result.IsNull() && resource.NotNull())
			{
				System.IO.Directory.CreateDirectory(resource.Path.FolderPath.PlatformPath);
				result = ByteDevice.Open(resource, System.IO.FileMode.Create);
			}
			return result;
		}
コード例 #22
0
ファイル: Parser.cs プロジェクト: imintsystems/Kean
 public static Parser Read(object root, Uri.Locator resource)
 {
     return Parser.Read(root, IO.CharacterDevice.Open(IO.ByteDevice.Open(resource, null)));
 }
コード例 #23
0
ファイル: Response.cs プロジェクト: imintsystems/Kean
		public static Response MovedPermanently(Uri.Locator location)
		{
			return new Response() { Status = Status.MovedPermanently, Location = location };
		}
コード例 #24
0
ファイル: Client.cs プロジェクト: imintsystems/Kean
		public static Client Open(Uri.Locator url)
		{
			Client result = null;
			System.Net.HttpWebRequest backendRequest = System.Net.WebRequest.Create(url) as System.Net.HttpWebRequest;
			if (backendRequest.NotNull())
			{
				backendRequest.Credentials = url.Authority.User.NotNull() && url.Authority.User.Name.NotEmpty() && url.Authority.User.Password.NotEmpty() ? new System.Net.NetworkCredential(url.Authority.User.Name, url.Authority.User.Password) : null;
				System.Net.HttpWebResponse backendResponse = null;
				try
				{
					backendResponse = backendRequest.GetResponse() as System.Net.HttpWebResponse;
				}
				catch (System.Net.WebException ex)
				{
					backendResponse = ex.Response as System.Net.HttpWebResponse;
				}
				if (backendResponse.NotNull())
					result = new Client(backendRequest, backendResponse);
			}
			return result;
		}