Exemple #1
0
        public static void Start()
        {
            if (_running)
            {
                return;
            }
            var cfg     = DfsProtocolConfiguration.Instance;
            var cert    = new X509Certificate2(Config.Dfs.CertificatePath, Config.Dfs.CertificatePassword);
            var factory = cfg.GetServerSslFactory(cert);

            VerifyQueue = new ThreadedQueueProcessor <IncomingFileStatus>(Config.Dfs.VerifyQueue, new VerifyFileWorker());

            SendQueue = new ThreadedQueueProcessor <SendFileItem>(Config.Dfs.SendQueue, new SendFileWorker());

            UnzipQueue = new ThreadedQueueProcessor <UnzipFileItem>(Config.Dfs.UnzipQueue, new UnzipFileWorker());

            Server = new TcpServer(new IPEndPoint(IPAddress.Any, Config.Dfs.Port), cfg, factory);
            Server.ReceiveTimeout = TimeSpan.FromMilliseconds(Config.Dfs.PingInterval);
            Server.Timeout       += Server_Timeout;
            Server.IdleTimeout   += Server_IdleTimeout;
            Server.AcceptClient   = AcceptClient;
            Server.On <C2S_FileShareRequest>(HandleFileShareRequest);
            Server.On <C2S_FileInfoRequest>(HandleFileQuery);
            Server.On <C2S_PutFileRequest>(HandlePutFileRequest);
            Server.On <C2S_DownloadFileRequest>(HandleDownloadFileRequest);
            Server.OnRequest <C2S_DownloadFileReady>(CaptureDownloadFileReady);
            Server.On <C2S_DeleteFileRequest>(HandleDeleteFileRequest);
            Server.OnRequest <C2S_UnzipFileRequest>(CaptureUnzipFileRequest);
            Server.ClientDisconnected += Server_ClientDisconnected;
            Server.Start();
            _running = true;
        }
 public ProtocolConfiguration(IPayloadEncoder encoder, IPayloadDecoder decoder,
                              ThreadedQueueProcessor <SendMessageQueueItem> customOutQueue   = null,
                              ThreadedQueueProcessor <ReceiveMessageQueueItem> customInQueue = null, bool readAsync = false)
 {
     PayloadEncoder = encoder;
     PayloadDecoder = decoder;
     Serializer     = encoder.Serializer;
     CustomOutcomingMessageQueue = customOutQueue;
     CustomIncomingMessageQueue  = customInQueue;
     ReadAsync = readAsync;
     Initialize();
 }
            internal static void Pipe(ThreadedQueueProcessor <DummyWorkItem> p, int index, int count, int delayMin = 50, int delayMax = 120)
            {
                Console.WriteLine($"Pipe #{index}, {count}");
                p.NewClient();
                var rnd = new Random();

                for (int i = 0; i < count; i++)
                {
                    p.Enqueue(new DummyWorkItem()
                    {
                        Delay = rnd.Next(delayMin, delayMax), Target = index, TargetValue = i + 1
                    }, index);
                }
                //p.RemoveClient();
            }