view 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
line wrap: on
line source

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
using Christie_net.codegear;

namespace Christie_net.daemon {
public class ChristieDaemon {
    private int localPort;
    private AcceptThread acceptThread;
    public CodeGearManager cgm;

    public ChristieDaemon(int localPort, CodeGearManager cgm) {
        this.localPort = localPort;
        this.cgm = cgm;
    }

    public void Listen() {
        try {
            // listen on any address ipv4/ipv6
            IPHostEntry host = Dns.GetHostEntry("::");
            IPAddress ipAddress = host.AddressList[0];
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, localPort);

            Socket socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            Console.WriteLine("ChristieDaemon, listen: bind to " + localEndPoint);
            socket.Bind(localEndPoint);
            socket.Listen((int)SocketOptionName.MaxConnections);

            acceptThread = new AcceptThread(socket, cgm);
            Task.Factory.StartNew(
                () => acceptThread.Run(),
                TaskCreationOptions.LongRunning);
        } catch (IOException e) {
            Console.WriteLine(e.StackTrace);
        }
        
    }

}
}