annotate daemon/ChristieDaemon.cs @ 26:45ff08d59fda

update CGM
author riono <e165729@ie.u-ryukyu.ac.jp>
date Tue, 12 Jan 2021 21:23:23 +0900
parents 52cb63c37218
children 96fc5e71274e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
1 using System;
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
2 using System.IO;
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
3 using System.Net;
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
4 using System.Net.Sockets;
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
5 using System.Threading.Tasks;
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
6 using Christie_net.codegear;
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
7
20
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 namespace Christie_net.daemon {
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 public class ChristieDaemon {
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 private int localPort;
25
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
11 private AcceptThread acceptThread;
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
12 public CodeGearManager cgm;
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
13
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
14 public ChristieDaemon(int localPort, CodeGearManager cgm) {
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
15 this.localPort = localPort;
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
16 this.cgm = cgm;
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
17 }
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
18
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
19 public void Listen() {
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
20 try {
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
21 // listen on any address ipv4/ipv6
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
22 IPHostEntry host = Dns.GetHostEntry("::");
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
23 IPAddress ipAddress = host.AddressList[0];
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
24 IPEndPoint localEndPoint = new IPEndPoint(ipAddress, localPort);
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
25
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
26 Socket socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
27 socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
28 Console.WriteLine("ChristieDaemon, listen: bind to " + localEndPoint);
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
29 socket.Bind(localEndPoint);
26
45ff08d59fda update CGM
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
30 socket.Listen((int)SocketOptionName.MaxConnections);
25
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
31
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
32 acceptThread = new AcceptThread(socket, cgm);
26
45ff08d59fda update CGM
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
33 Task.Factory.StartNew(
45ff08d59fda update CGM
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
34 () => acceptThread.Run(),
45ff08d59fda update CGM
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
35 TaskCreationOptions.LongRunning);
25
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
36 } catch (IOException e) {
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
37 Console.WriteLine(e.StackTrace);
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
38 }
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
39
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
40 }
52cb63c37218 update ChristieDaemon
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
41
20
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 }
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 }