## UWeb
Class WebServer

source: C:\XIII\UWeb\Classes\WebServer.uc

    Core.Object
       |
       +--Engine.Actor
          |
          +--Engine.Info
             |
             +--Engine.InternetInfo
                |
                +--IpDrv.InternetLink
                   |
                   +--IpDrv.TcpLink
                      |
                      +--UWeb.WebServer

Direct Known Subclasses:None

class WebServer
extends IpDrv.TcpLink

Variables
`WebApplication` | `ApplicationObjects[10]`
`string` | `ApplicationPaths[10]`
`string` | `Applications[10]`
`int` | `ConnectionCount`
`int` | `DefaultApplication`
`int` | `ListenPort`
`int` | `MaxConnections`
`string` | `ServerName`
`string` | `ServerURL`
`bool` | `bEnabled`

Function Summary
`void` | `BeginPlay()`
`WebApplication` | `GetApplication(string URI, out string)`

Source Code

    00001	class WebServer extends TcpLink;
    00002
    00003	var config string Applications[10];
    00004	var config string ApplicationPaths[10];
    00005	var config int ListenPort;
    00006	var config int MaxConnections;
    00007	var config string ServerName;
    00008	var config bool bEnabled;
    00009	var config int DefaultApplication;
    00010
    00011	var string ServerURL;
    00012	var WebApplication ApplicationObjects[10];
    00013
    00014	var int ConnectionCount;
    00015
    00016	function BeginPlay()
    00017	{
    00018		local int i;
    00019		local class<WebApplication> ApplicationClass;
    00020		local IpAddr l;
    00021		local string s;
    00022
    00023		if(!bEnabled)
    00024		{
    00025			Log("Webserver is not enabled.  Set bEnabled to True in Advanced Options.");
    00026			Destroy();
    00027			return;
    00028		}
    00029
    00030		Super.BeginPlay();
    00031
    00032		for(i=0;i<10;i++)
    00033		{
    00034			if(Applications[i] == "")
    00035				break;
    00036
    00037			ApplicationClass = class<WebApplication>(DynamicLoadObject(Applications[i], class'Class'));
    00038			if(ApplicationClass != None)
    00039			{
    00040				ApplicationObjects[i] = New(None) ApplicationClass;
    00041				ApplicationObjects[i].Level = Level;
    00042				ApplicationObjects[i].WebServer = Self;
    00043				ApplicationObjects[i].Path = ApplicationPaths[i];
    00044				ApplicationObjects[i].Init();
    00045			}
    00046		}
    00047
    00048		if(ServerName == "")
    00049		{
    00050			GetLocalIP(l);
    00051			s = IpAddrToString(l);
    00052			i = InStr(s, ":");
    00053			if(i != -1)
    00054				s = Left(s, i);
    00055			ServerURL = "http://"$s;
    00056		}
    00057		else
    00058			ServerURL = "http://"$ServerName;
    00059
    00060		if(ListenPort != 80)
    00061			ServerURL = ServerURL $ ":"$string(ListenPort);
    00062
    00063		BindPort( ListenPort );
    00064		Listen();
    00065	}
    00066
    00067	event Destroyed()
    00068	{
    00069		local int i;
    00070
    00071		for(i=0;i<10;i++)
    00072			if(ApplicationObjects[i] != None)
    00073			{
    00074				ApplicationObjects[i].Cleanup();
    00075				ApplicationObjects[i].Level = None;
    00076				ApplicationObjects[i].WebServer = None;
    00077				ApplicationObjects[i] = None;
    00078			}
    00079
    00080		Super.Destroyed();
    00081	}
    00082
    00083	event GainedChild( Actor C )
    00084	{
    00085		Super.GainedChild(C);
    00086		ConnectionCount++;
    00087
    00088		// if too many connections, close down listen.
    00089		if(MaxConnections > 0 && ConnectionCount > MaxConnections && LinkState == STATE_Listening)
    00090		{
    00091			Log("WebServer: Too many connections - closing down Listen.");
    00092			Close();
    00093		}
    00094	}
    00095
    00096	event LostChild( Actor C )
    00097	{
    00098		Super.LostChild(C);
    00099		ConnectionCount--;
    00100
    00101		// if closed due to too many connections, start listening again.
    00102		if(ConnectionCount <= MaxConnections && LinkState != STATE_Listening)
    00103		{
    00104			Log("WebServer: Listening again - connections have been closed.");
    00105			Listen();
    00106		}
    00107	}
    00108
    00109	function WebApplication GetApplication(string URI, out string SubURI)
    00110	{
    00111		local int i, l;
    00112
    00113		SubURI = "";
    00114		for(i=0;i<10;i++)
    00115		{
    00116			if(ApplicationPaths[i] != "")
    00117			{
    00118				l = Len(ApplicationPaths[i]);
    00119				if(Left(URI, l) == ApplicationPaths[i] && (Len(URI) == l || Mid(URI, l, 1) == "/"))
    00120				{
    00121					SubURI = Mid(URI, l);
    00122					return ApplicationObjects[i];
    00123				}
    00124			}
    00125		}
    00126		return None;
    00127	}
    00128
    00129
    00130	defaultproperties
    00131	{
    00132	     ListenPort=80
    00133	     MaxConnections=30
    00134	     AcceptClass=Class'UWeb.WebConnection'
    00135	}

End Source Code