Commit ff27020e authored by justcoding121's avatar justcoding121

use light weight lock in example

parent 9a6b2a97
...@@ -3,6 +3,7 @@ using System.Collections.Concurrent; ...@@ -3,6 +3,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net; using System.Net;
using System.Net.Security; using System.Net.Security;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Titanium.Web.Proxy.EventArguments; using Titanium.Web.Proxy.EventArguments;
using Titanium.Web.Proxy.Exceptions; using Titanium.Web.Proxy.Exceptions;
...@@ -14,7 +15,7 @@ namespace Titanium.Web.Proxy.Examples.Basic ...@@ -14,7 +15,7 @@ namespace Titanium.Web.Proxy.Examples.Basic
{ {
public class ProxyTestController public class ProxyTestController
{ {
private readonly object lockObj = new object(); private readonly SemaphoreSlim @lock = new SemaphoreSlim(1);
private readonly ProxyServer proxyServer; private readonly ProxyServer proxyServer;
...@@ -30,9 +31,11 @@ namespace Titanium.Web.Proxy.Examples.Basic ...@@ -30,9 +31,11 @@ namespace Titanium.Web.Proxy.Examples.Basic
//proxyServer.CertificateManager.TrustRootCertificate(); //proxyServer.CertificateManager.TrustRootCertificate();
//proxyServer.CertificateManager.TrustRootCertificateAsAdmin(); //proxyServer.CertificateManager.TrustRootCertificateAsAdmin();
proxyServer.ExceptionFunc = exception => proxyServer.ExceptionFunc = async exception =>
{ {
lock (lockObj) await @lock.WaitAsync();
try
{ {
var color = Console.ForegroundColor; var color = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.Red;
...@@ -46,6 +49,11 @@ namespace Titanium.Web.Proxy.Examples.Basic ...@@ -46,6 +49,11 @@ namespace Titanium.Web.Proxy.Examples.Basic
} }
Console.ForegroundColor = color; Console.ForegroundColor = color;
}
finally
{
@lock.Release();
} }
}; };
proxyServer.ForwardToUpstreamGateway = true; proxyServer.ForwardToUpstreamGateway = true;
...@@ -130,7 +138,7 @@ namespace Titanium.Web.Proxy.Examples.Basic ...@@ -130,7 +138,7 @@ namespace Titanium.Web.Proxy.Examples.Basic
private async Task OnBeforeTunnelConnectRequest(object sender, TunnelConnectSessionEventArgs e) private async Task OnBeforeTunnelConnectRequest(object sender, TunnelConnectSessionEventArgs e)
{ {
string hostname = e.WebSession.Request.RequestUri.Host; string hostname = e.WebSession.Request.RequestUri.Host;
WriteToConsole("Tunnel to: " + hostname); await WriteToConsole("Tunnel to: " + hostname);
if (hostname.Contains("dropbox.com")) if (hostname.Contains("dropbox.com"))
{ {
...@@ -148,8 +156,8 @@ namespace Titanium.Web.Proxy.Examples.Basic ...@@ -148,8 +156,8 @@ namespace Titanium.Web.Proxy.Examples.Basic
// intecept & cancel redirect or update requests // intecept & cancel redirect or update requests
private async Task OnRequest(object sender, SessionEventArgs e) private async Task OnRequest(object sender, SessionEventArgs e)
{ {
WriteToConsole("Active Client Connections:" + ((ProxyServer)sender).ClientConnectionCount); await WriteToConsole("Active Client Connections:" + ((ProxyServer)sender).ClientConnectionCount);
WriteToConsole(e.WebSession.Request.Url); await WriteToConsole(e.WebSession.Request.Url);
// store it in the UserData property // store it in the UserData property
// It can be a simple integer, Guid, or any type // It can be a simple integer, Guid, or any type
...@@ -187,19 +195,19 @@ namespace Titanium.Web.Proxy.Examples.Basic ...@@ -187,19 +195,19 @@ namespace Titanium.Web.Proxy.Examples.Basic
} }
// Modify response // Modify response
private void MultipartRequestPartSent(object sender, MultipartRequestPartSentEventArgs e) private async Task MultipartRequestPartSent(object sender, MultipartRequestPartSentEventArgs e)
{ {
var session = (SessionEventArgs)sender; var session = (SessionEventArgs)sender;
WriteToConsole("Multipart form data headers:"); await WriteToConsole("Multipart form data headers:");
foreach (var header in e.Headers) foreach (var header in e.Headers)
{ {
WriteToConsole(header.ToString()); await WriteToConsole(header.ToString());
} }
} }
private async Task OnResponse(object sender, SessionEventArgs e) private async Task OnResponse(object sender, SessionEventArgs e)
{ {
WriteToConsole("Active Server Connections:" + ((ProxyServer)sender).ServerConnectionCount); await WriteToConsole("Active Server Connections:" + ((ProxyServer)sender).ServerConnectionCount);
string ext = System.IO.Path.GetExtension(e.WebSession.Request.RequestUri.AbsolutePath); string ext = System.IO.Path.GetExtension(e.WebSession.Request.RequestUri.AbsolutePath);
...@@ -271,12 +279,18 @@ namespace Titanium.Web.Proxy.Examples.Basic ...@@ -271,12 +279,18 @@ namespace Titanium.Web.Proxy.Examples.Basic
return Task.FromResult(0); return Task.FromResult(0);
} }
private void WriteToConsole(string message) private async Task WriteToConsole(string message)
{ {
lock (lockObj) await @lock.WaitAsync();
try
{ {
Console.WriteLine(message); Console.WriteLine(message);
} }
finally
{
@lock.Release();
}
} }
///// <summary> ///// <summary>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment