view datagear/RemoteDataGearManager.cs @ 26:45ff08d59fda

update CGM
author riono <e165729@ie.u-ryukyu.ac.jp>
date Tue, 12 Jan 2021 21:23:23 +0900
parents datagear/command/RemoteDataGearManager.cs@3aaa77e12493
children efb06874a34e
line wrap: on
line source

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
using Christie_net.codegear;
using Christie_net.daemon;
using Christie_net.datagear.command;
using Christie_net.datagear.dg;

namespace Christie_net.datagear {
public class RemoteDataGearManager : DataGearManager {
    private Connection connection;
    private CodeGearManager cgm;
    private bool connect = false;
    private object lockObj = new object();
    
    public RemoteDataGearManager (string address, int port, CodeGearManager cgm) {
        this.cgm = cgm;
        RemoteDataGearManager manager = this;
        Task.Factory.StartNew(() => {
            do {
                try {
                    IPHostEntry host = Dns.GetHostEntry(address);
                    IPAddress ipAddress = host.AddressList[0];
                    IPEndPoint remoteEndPoint = new IPEndPoint(ipAddress, port);
                    Socket socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                    socket.Bind(remoteEndPoint);
                    socket.Listen((int) SocketOptionName.MaxConnections);
                    socket.NoDelay = true;

                    Socket listener = socket.Accept();
                    connection = new Connection(listener, cgm);
                } catch { }
            } while (!connect);

            IncomingTcpConnection incoming = new IncomingTcpConnection(connection);
            incoming.SetManager(manager);
            Task.Factory.StartNew(
                () => incoming.Run(),
                    TaskCreationOptions.LongRunning);
            OutboundTcpConnection outbound = new OutboundTcpConnection(connection);
            Task.Factory.StartNew(
                () => outbound.Run(),
                TaskCreationOptions.LongRunning);
        });
    }
    
    public override void Put(string key, object data) {
        throw new NotImplementedException();
    }

    public override void RunCommand(Command cm) {
        throw new NotImplementedException();
    }

    public override void ResolveWaitCommand(string key, DataGear<Type> dg) {
        throw new NotImplementedException();
    }

    public override void Finish() {
        throw new NotImplementedException();
    }

    public override void Close() {
        throw new NotImplementedException();
    }

    public override void Shutdown() {
        throw new NotImplementedException();
    }
}
}