1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| public partial class Service : ServiceBase
{
private Thread serverThread;
private List<Thread> processThreadList;
private TcpListener server;
private EventLog myEventLog;
public Service()
{
InitializeComponent();
processThreadList = new List<Thread>();
}
protected override void OnStart(string[] args)
{
if (!EventLog.SourceExists("BSS-IT IDocs"))
EventLog.CreateEventSource("BSS-IT IDocs", "BSS-IT IDocs");
myEventLog = new EventLog();
myEventLog.Source = "BSS-IT IDocs";
myEventLog.WriteEntry("BSS-IT IDocs Service has been started", EventLogEntryType.Information);
serverThread = new Thread(new ThreadStart(Server_Init));
serverThread.Start();
}
private void Server_Init()
{
String strPort = ConfigurationManager.AppSettings["port"].ToString();
if (strPort == null)
{
myEventLog.WriteEntry("Parametre \"port\" not found. Service has been stopped.", EventLogEntryType.Error);
Stop();
}
Int32 port;
if (!Int32.TryParse(strPort, out port))
{
myEventLog.WriteEntry("Parametre \"port\" must be numeric. Service has been stopped", EventLogEntryType.Error);
Stop();
}
server = new TcpListener(IPAddress.Any, port);
server.Start();
while (Thread.CurrentThread.IsAlive)
{
Socket client = server.AcceptSocket();
ProcessThread processThread = new ProcessThread(client, processThreadList, myEventLog);
Thread thread = new Thread(new ThreadStart(processThread.ThreadLoop));
processThreadList.Add(thread);
thread.Start();
}
}
protected override void OnStop()
{
myEventLog.WriteEntry("BSS-IT IDocs Service has been stopped", EventLogEntryType.Information);
foreach (Thread thread in processThreadList)
thread.Abort();
serverThread.Abort();
server.Stop();
}
} |
Partager