view daemon/ChristieDaemon.cs @ 31:6399d784c6d1

add FizzBuzz Test
author riono <e165729@ie.u-ryukyu.ac.jp>
date Tue, 13 Apr 2021 18:25:15 +0900
parents 96fc5e71274e
children 7575980bffc9
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
           
            IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, localPort);

            Socket socket = new Socket(AddressFamily.InterNetwork , 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);

            // Socket ss = null;
            // ss = socket.Accept();
            // ss.NoDelay = true;
            // Console.WriteLine("Accept " + ss.LocalEndPoint + ":" + ((IPEndPoint)ss.LocalEndPoint).Port);
            
            
            acceptThread = new AcceptThread(socket, cgm);
            Task.Factory.StartNew(
                () => acceptThread.Run(),
                TaskCreationOptions.LongRunning);
        } catch (IOException e) {
            Console.WriteLine(e.StackTrace);
        }
        
    }

}
}