Пример #1
0
        protected virtual async Task DataOnByLine(IFiberRw fiberRw)
        {
            using (ReadBytes read = new ReadBytes(fiberRw))
            {
                await read.Init();

                var cmd = read.ReadInt32();

                switch (cmd)
                {
                case 2000:     //set session
                {
                    var sessionid = (read.ReadInt64()).GetValueOrDefault(0);
                    Log.TraceFormat("save sessionid {0}", sessionid);
                    Session.SaveSessionId(sessionid);
                }
                break;

                case 2400:     //Call It
                {
                    await Calling(read);
                }
                break;

                case 2500:     //set result
                {
                    ReadResult(read);
                }
                break;

                default:
                    throw new NetxException($"data error:{cmd.GetValueOrDefault()}", ErrorType.ReadErr);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// 数据包输入
        /// </summary>
        /// <param name="data">输入数据</param>
        /// <param name="socketAsync">该数据包的通讯SOCKET</param>
        static async void BinaryInputHandler(ISockAsyncEvent socketAsync)
        {
            var fiberRw = await socketAsync.GetFiberRw <string>();

            fiberRw.UserToken = "my is ttk";

            for (; ;)
            {
                //try
                //{
                //    //读取 发送 测试
                //    var data = await fiberRw.ReadToBlockArrayEnd();
                //    fiberRw.Write(data);
                //    await fiberRw.FlushAsync();


                //}
                //catch (SocketException)
                //{
                //    break;
                //}
                //catch (Exception er)
                //{
                //    Console.WriteLine(er.ToString());
                //    break;
                //}

                try
                {
                    //提供2种数据 读取写入方式
                    using (ReadBytes readBytes = new ReadBytes(fiberRw))
                    {
                        await readBytes.Init();

                        DataOn(readBytes, fiberRw);
                    }


                    await DataOnByLine(fiberRw);
                }
                catch (System.Net.Sockets.SocketException)
                {
                    break;
                }
                catch (Exception er)
                {
                    Console.WriteLine(er.ToString());
                    break;
                }
            }

            socketAsync.Disconnect();
        }
Пример #3
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验证

                    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();
                }
            }
        }