ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/Qzhteln/trunk/TELTest/Program.cs
Revision: 2
Committed: Wed Feb 11 13:07:01 2026 UTC (8 weeks, 4 days ago) by figdor32
File size: 3258 byte(s)
Log Message:
Initial check-in

File Contents

# Content
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Net.Sockets;
6 using System.Text;
7 using System.Threading.Tasks;
8
9 namespace TELTest {
10 class Program {
11
12 static void Main(string[] args) {
13 Environment.CurrentDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
14
15 Task.Run(async () => {
16 var ipEndPoint = new IPEndPoint(IPAddress.Any, 1553);
17
18 TcpListener listener = new TcpListener(ipEndPoint);
19 WriteWithTime("Listening on " + ipEndPoint);
20 try {
21 listener.Start();
22 while (true) {
23 TcpClient tc = await listener.AcceptTcpClientAsync();
24 AcceptConnection(tc);
25 }
26 } finally {
27 listener.Stop();
28 }
29 }).Wait();
30 }
31 static async void AcceptConnection(TcpClient handler) {
32 var endpoint = handler.Client.RemoteEndPoint;
33 handler.Client.SetSocketKeepAliveValues(2000, 1000);
34 WriteWithTime("Incoming connection from " + endpoint);
35 ConnectionHandler ch = new NormalConnectionHandler();
36 try {
37 using (handler) {
38 using (NetworkStream stream = handler.GetStream()) {
39
40 WriteWithTime(ConnectionHandler.AllHandlers.Count + " concurrent connections right now.");
41 if (Config.MaxConnections < ConnectionHandler.AllHandlers.Count) {
42 await ch.WriteASCII(stream, "Sorry, the server is full (" + (ConnectionHandler.AllHandlers.Count - 1) + "/" + Config.MaxConnections + ")");
43 WriteWithTime(handler.Client.RemoteEndPoint + " exceeds server capacity, disconnecting.");
44 } else {
45 await ch.Handle(stream);
46 }
47 WriteWithTime(handler.Client.RemoteEndPoint + " disconnected.");
48 }
49 }
50 } catch (System.IO.IOException x) {
51 ConnectionHandler.AllHandlers.Remove(ch);
52 WriteWithTime("Endpoint " + endpoint + " unexpectedly disconnected. ({0})", x.Message + ", " + x.InnerException);
53 } catch (ArgumentOutOfRangeException x) {
54 ConnectionHandler.AllHandlers.Remove(ch);
55 WriteWithTime("Endpoint " + endpoint + " unexpectedly disconnected. ({0})", x.Message + ", " + x.InnerException);
56 } catch (Exception x) {
57 ConnectionHandler.AllHandlers.Remove(ch);
58 var lc = Console.ForegroundColor;
59 Console.ForegroundColor = ConsoleColor.Red;
60 WriteWithTime("GENERAL EXCEPTION:\r\n{0}", x);
61 Console.ForegroundColor = lc;
62 }
63
64 }
65 public static void WriteWithTime(string format, params object[] arg) {
66 Console.WriteLine("[" + DateTime.Now + "] " + format, arg);
67 }
68 }
69 }