예제 #1
0
        private async void SocketClient_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            var fiberRw = await GetFiberRw(socketAsync);

            try
            {
                if (fiberRw == null)
                {
                    client.SetConnected(false, "ssl error");
                    return;
                }

                IWrite = fiberRw;

                if (!isConnect)
                {
                    await SendVerify();        //发送KEY和sessionid验证

                    await fiberRw.ReadInt32(); //丢弃长度,因为这个Socket框架不需要,留给C++ go java等语言和其他SOCKET框架用

                    switch (await fiberRw.ReadInt32())
                    {
                    case 1000:     //key check
                    {
                        var iserror = await fiberRw.ReadBoolean();

                        if (!iserror)
                        {
                            Log.Trace(await fiberRw.ReadString());
                            isConnect = true;
                            client.SetConnected();
                            await ReadIng(fiberRw);
                        }
                        else
                        {
                            var msg = await fiberRw.ReadString();

                            Log.Info(msg);
                            client.SetConnected(false, msg);
                        }
                    }
                    break;
                    }
                }

                client.ShutdownBoth(true);
            }
            catch (Exception er)
            {
                if (!client.IsConnect)
                {
                    client.SetConnected(false, er.Message);
                }
                else
                {
                    Log.Error(er);
                    client.ShutdownBoth(true);
                }
            }
        }
예제 #2
0
        private static async void Client_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            // USE SSL
            var res = await socketAsync.GetFiberRwSSL <string>(certificate, "localhost");

            if (res.IsError)
            {
                Console.WriteLine(res.ErrMsg);
                client.ShutdownBoth(true);
                return;
            }

            var fiberRw = res.FiberRw;

            // var fiberRw = await socketAsync.GetFiberRw();

            client.SetConnected();

            while (true)
            {
                try
                {
                    await DataOnByLine(fiberRw);
                }
                catch
                {
                    break;
                }
            }

            client.ShutdownBoth();
        }
예제 #3
0
        private static async void Client_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            var res = await socketAsync.GetFiberRwSSL(null, "");  //我们在这地方使用SSL加密

            if (res.IsError)
            {
                Console.WriteLine(res.ErrMsg);
                client.ShutdownBoth();
                return;
            }

            client.SetConnected();


            for (; ;)  //我们可以在这里处理数据或者在上面
            {
                try
                {
                    await ReadCommand(res.FiberRw);
                }
                catch (Exception er)
                {
                    Console.WriteLine(er);
                    break;
                }
            }

            client.ShutdownBoth();
        }
예제 #4
0
        private static async void Client_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            var fiberRw = await socketAsync.GetFiberRw();

            if (fiberRw == null)
            {
                client.ShutdownBoth(true);
                return;
            }

            client.SetConnected();


            for (; ;)  //我们可以在这里处理数据或者在上面
            {
                try
                {
                    await ReadCommand(fiberRw);
                }
                catch (Exception er)
                {
                    Console.WriteLine(er);
                    break;
                }
            }

            client.ShutdownBoth(true);
        }
예제 #5
0
        private static async void Client_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            // USE SSL+GZIP
            var res = await socketAsync.GetFiberRwSSL <string>(certificate, "localhost", (input, output) =>
            {
                //var gzip_input = new GZipStream(input, CompressionMode.Decompress, true);
                //var gzip_output = new GZipStream(output, CompressionMode.Compress, true);
                //return new GetFiberRwResult(gzip_input, gzip_output); //return gzip mode

                var lz4_input  = K4os.Compression.LZ4.AsyncStreams.LZ4Stream.Decode(input, leaveOpen: true);
                var lz4_output = K4os.Compression.LZ4.AsyncStreams.LZ4Stream.Encode(output, leaveOpen: true);
                return(new GetFiberRwResult(lz4_input, lz4_output));   //return lz4 mode
            });

            if (res.IsError)
            {
                Console.WriteLine(res.ErrMsg);
                client.ShutdownBoth(true);
                return;
            }

            var fiberRw = res.FiberRw;

            //var fiberRw = await socketAsync.GetFiberRw((input, output) =>
            //{
            //    var lz4_input = K4os.Compression.LZ4.Streams.LZ4Stream.Decode(input, leaveOpen: true);
            //    var lz4_output = K4os.Compression.LZ4.Streams.LZ4Stream.Encode(output, leaveOpen: true);
            //    return new GetFiberRwResult(lz4_input, lz4_output); //return lz4 mode
            //});

            // var fiberRw = await socketAsync.GetFiberRw();

            client.SetConnected();

            var testspeed = Stopwatch.StartNew();
            var i         = 0L;

            while (true)
            {
                try
                {
                    i++;
                    await DataOnByLine(fiberRw);

                    if (i % 10000 == 0)
                    {
                        Console.WriteLine(testspeed.ElapsedMilliseconds + " ms");
                        testspeed.Restart();
                    }

                    //Console.WriteLine("OK");
                }
                catch
                {
                    break;
                }
            }

            client.ShutdownBoth();
        }
예제 #6
0
        private static async void Client_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            var fiberRw = await socketAsync.GetFiberRw((input, output) =>                   //我们在这地方使用GZIP 压缩发送流 解压读取流
            {
                var gzip_input  = new GZipStream(input, CompressionMode.Decompress, false); //将读取流解压
                var gzip_output = new GZipStream(output, CompressionMode.Compress, false);  //将输出流压缩
                return(new GetFiberRwResult(gzip_input, gzip_output));                      //这里顺序不要搞反 (input,output)的顺序
            });

            if (fiberRw == null)
            {
                client.ShutdownBoth(true);
                return;
            }

            client.SetConnected();


            for (; ;)  //我们可以在这里处理数据或者在上面
            {
                try
                {
                    await ReadCommand(fiberRw);
                }
                catch (Exception er)
                {
                    Console.WriteLine(er);
                    break;
                }
            }

            client.ShutdownBoth(true);
        }
예제 #7
0
        private static async void Client_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            var res = await socketAsync.GetFiberRwSSL(null, "localhost");

            var fiberRw = res.FiberRw;

            client.SetConnected();

            while (true)
            {
                try
                {
                    string a = await fiberRw.ReadString();

                    Console.WriteLine(a);
                }
                catch
                {
                    break;
                }
            }


            client.ShutdownBoth(true);
        }
예제 #8
0
        /// <summary>
        /// 返回FiberRw
        /// </summary>
        /// <param name="socketAsync"></param>
        /// <returns></returns>
        protected virtual async Task <IFiberRw?> GetFiberRw(ISockAsyncEventAsClient socketAsync)
        {
            if (is_use_ssl) //SSL Config
            {
                var result = decodeType switch
                {
                    CompressType.None => await socketAsync.GetFiberRwSSL(Certificate !),
                    CompressType.gzip => await socketAsync.GetFiberRwSSL(Certificate !, init : (input, output) =>
                    {
                        var gzip_input  = new GZipStream(input, CompressionMode.Decompress, true);
                        var gzip_output = new GZipStream(output, CompressionMode.Compress, true);
                        return(new GetFiberRwResult(gzip_input, gzip_output));  //return gzip mode
                    }),
                    CompressType.lz4 => await socketAsync.GetFiberRwSSL(Certificate !, init : (input, output) =>
                    {
                        var lz4_input  = K4os.Compression.LZ4.AsyncStreams.LZ4Stream.Decode(input, leaveOpen: true);
                        var lz4_output = K4os.Compression.LZ4.AsyncStreams.LZ4Stream.Encode(output, leaveOpen: true);
                        return(new GetFiberRwResult(lz4_input, lz4_output)); //return lz4 mode
                    }),
                    _ => throw new NotImplementedException()
                };

                if (result.IsError)
                {
                    if (result.ErrMsg != null)
                    {
                        Log.Error(result.ErrMsg);
                    }
                    return(null);
                }
                else
                {
                    return(result.FiberRw);
                }
            }
            else
            {
                return(decodeType switch
                {
                    CompressType.None => await socketAsync.GetFiberRw(),
                    CompressType.gzip => await socketAsync.GetFiberRw((input, output) =>
                    {
                        var gzip_input = new GZipStream(input, CompressionMode.Decompress, true);
                        var gzip_output = new GZipStream(output, CompressionMode.Compress, true);
                        return new GetFiberRwResult(gzip_input, gzip_output); //return gzip mode
                    }),
                    CompressType.lz4 => await socketAsync.GetFiberRw((input, output) =>
                    {
                        var lz4_input = K4os.Compression.LZ4.AsyncStreams.LZ4Stream.Decode(input, leaveOpen: true);
                        var lz4_output = K4os.Compression.LZ4.AsyncStreams.LZ4Stream.Encode(output, leaveOpen: true);
                        return new GetFiberRwResult(lz4_input, lz4_output); //return lz4 mode
                    }),
                    _ => throw new NotImplementedException()
                });
예제 #9
0
        private static async void Client_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            //USE SSL+GZIP
            //var res = await socketAsync.GetFiberRwSSL<string>(null, "localhost", (input, output) =>
            //{
            //    var gzip_input = new GZipStream(input, CompressionMode.Decompress, true);
            //    var gzip_output = new GZipStream(output, CompressionMode.Compress, true);
            //    return new GetFiberRwResult(gzip_input, gzip_output); //return gzip mode

            //});



            //if (res.IsError)
            //{
            //    Console.WriteLine(res.ErrMsg);
            //    client.ShutdownBoth(true);
            //    return;
            //}

            //var fiberRw = res.FiberRw;


            var fiberRw = await socketAsync.GetFiberRw();

            client.SetConnected();



            while (true)
            {
                try
                {
                    await DataOnByLine(fiberRw);
                }
                catch
                {
                    break;
                }
            }

            client.ShutdownBoth(true);
        }
예제 #10
0
파일: Program.cs 프로젝트: Mrwch/ZYSOCKET-V
        private static async void Client_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            var res = await socketAsync.GetFiberRwSSL(async stream =>
            {
                var sslstream = new SslStream(stream, false, (sender, certificate, chain, errors) => true,
                                              (sender, host, certificates, certificate, issuers)
                                              => certificate);

                try
                {
                    await sslstream.AuthenticateAsClientAsync("localhost");
                }
                catch (Exception er)
                {
                    Console.WriteLine(er.Message);
                    return(null);
                }

                return(sslstream);
            });

            var fiberRw = res.FiberRw;

            client.SetConnected();

            while (true)
            {
                try
                {
                    string a = await fiberRw.ReadString();

                    Console.WriteLine(a);
                }
                catch
                {
                    break;
                }
            }


            client.ShutdownBoth(true);
        }
예제 #11
0
        /// <summary>
        /// 返回FiberRw
        /// </summary>
        /// <param name="socketAsync"></param>
        /// <returns></returns>
        protected virtual async Task <IFiberRw> GetFiberRw(ISockAsyncEventAsClient socketAsync)
        {
            if (is_use_ssl) //SSL Config
            {
                var result = await socketAsync.GetFiberRwSSL(Certificate);

                if (result.IsError)
                {
                    Log.Error(result.ErrMsg);
                    return(null);
                }
                else
                {
                    return(result.FiberRw);
                }
            }
            else
            {
                return(await socketAsync.GetFiberRw());
            }
        }
예제 #12
0
        private static async void Client_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            var res = await socketAsync.GetFiberRwSSL(null, "", (input, output) => //在GZIP的基础上在通过SSL 加密
            {
                var gzip_input  = new GZipStream(input, CompressionMode.Decompress, true);
                var gzip_output = new GZipStream(output, CompressionMode.Compress, true);
                return(new GetFiberRwResult(gzip_input, gzip_output));
            });  //我们在这地方使用SSL加密

            if (res.IsError)
            {
                Console.WriteLine(res.ErrMsg);
                client.ShutdownBoth();
                return;
            }

            client.SetConnected();

            for (; ;)  //我们可以在这里处理数据或者在上面
            {
                try
                {
                    await ReadCommand(res.FiberRw);
                }
                catch (System.Net.Sockets.SocketException)
                {
                    break;
                }
                catch (Exception er)
                {
                    Console.WriteLine(er);
                    break;
                }
            }

            socketAsync.Disconnect();
        }
예제 #13
0
        private static async void Client_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {

            var fiberRw = await socketAsync.GetFiberRw((input,output) =>  //我们在这地方使用GZIP 压缩发送流 解压读取流
            {             
                var lz4_input = K4os.Compression.LZ4.AsyncStreams.LZ4Stream.Decode(input);
                var lz4_output = K4os.Compression.LZ4.AsyncStreams.LZ4Stream.Encode(output);
                return new GetFiberRwResult(lz4_input, lz4_output); //这里顺序不要搞反 (input,output)的顺序

            }); 

            if(fiberRw==null)
            {
                client.ShutdownBoth(true);
                return;
            }

            client.SetConnected();


            for (; ; ) //我们可以在这里处理数据或者在上面
            {
                try
                {
                    await ReadCommand(fiberRw);
                }
                catch (Exception er)
                {
                    Console.WriteLine(er);
                    break;
                }
            }

            client.ShutdownBoth(true);

        }
예제 #14
0
 private void SocketClient_Disconnect(ISocketClient client, ISockAsyncEventAsClient socketAsync, string msg)
 {
     Log.Info($"{ConnectOption.Host}:{ConnectOption.Port}->{msg}");
     Close();
     Disconnect?.Invoke(client, socketAsync, msg);
 }
예제 #15
0
파일: NetxClient.cs 프로젝트: luyikk/NetX
        private async void SocketClient_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            var fiberRw = await GetFiberRw(socketAsync);

            try
            {
                if (fiberRw == null)
                {
                    client.SetConnected(false, "ssl error");
                    return;
                }

                IWrite = fiberRw;

                if (!isConnect)
                {
                    await SendVerify(); //发送KEY和sessionid验证

                    using ReadBytes read = new ReadBytes(fiberRw);
                    await read.Init();

                    switch (read.ReadInt32())
                    {
                    case 1000:     //key check
                    {
                        var iserror = read.ReadBoolean();

                        if (!iserror)
                        {
                            Log.Trace(read.ReadString());

                            if (read.Memory.Length >= 1)
                            {
                                if (read.ReadByte() == 1)
                                {
                                    Mode = 1;
                                }
                            }

                            isConnect = true;
                            client.SetConnected();
                            await GetSessionId();
                            await ReadIng(fiberRw);
                        }
                        else
                        {
                            var msg = read.ReadString();
                            Log.Info(msg);
                            client.SetConnected(false, msg);
                        }
                    }
                    break;
                    }
                }

                client.ShutdownBoth();
            }
            catch (Exception er)
            {
                if (!client.IsConnect)
                {
                    client.SetConnected(false, er.Message);
                }
                else
                {
                    Log.Error(er);
                    client.ShutdownBoth();
                }
            }
        }