/// <summary>
        /// Triggerd if datareceived while in monitoring mode
        /// </summary>       
        public void Process(ReceivedEventArgs data1)
        {
            var data = data1.Bytes;
            _buffer.AddRange(data);
            if (_buffer.Count < 5) return;

            for (var i = 0; i < _buffer.Count; i++)
            {
                if (_buffer.Count >= i + 5)
                {
                    int unitId;
                    if (ErrorCodes.IsMonitoringTimeout(_buffer.Skip(i).Take(5).ToList(), out unitId))
                    {
                        i += 5;
                        _buffer.RemoveRange(0, 5);
                        OnMonitorTimer(unitId);
                    }
                }

                if (_buffer.Count < i + 10) continue;
                ErrorLineModel error;
                if (!ErrorCodes.GetErrorFromEscCode(_buffer.Skip(i).Take(10).ToArray(), out error)) continue;
                i += 9;
                _buffer.RemoveRange(0, 10);
                OnErrorReceived(error);
            }

            if (_buffer.Count >= 19)
                _buffer.RemoveRange(0, 10);
        }
Esempio n. 2
0
        void server_Received(object sender, ReceivedEventArgs e)
        {
            var session = sender as ISocketSession;

            var str = e.Stream.ToStr();
            var remote = "" + session.Remote.EndPoint;
            if (remote == "" + HoleServer)
            {
                WriteLog("HoleServer数据到来:{0} {1}", session.Remote, str);

                var ss = str.Split(":");
                if (ss == null || ss.Length < 2) return;

                IPAddress address = null;
                if (!IPAddress.TryParse(ss[0], out address)) return;
                Int32 port = 0;
                if (!Int32.TryParse(ss[1], out port)) return;
                var ep = new IPEndPoint(address, port);
                ParterAddress = ep;

                Console.WriteLine("准备连接对方:{0}", ep);
                while (Success <= 0)
                {
                    (Server as UdpServer).Client.Send("Hello!", null, ep);

                    Thread.Sleep(100);
                    if (Success > 0) break;
                    Thread.Sleep(3000);
                }
            }
            else if (remote == "" + ParterAddress)
            {
                WriteLog("Parter数据到来:{0} {1}", session.Remote, str);
                //Success = true;
                if (Success > 0) Success++;

                //var session = e.Session;
                if (session != null)
                {
                    session.Send("P2P连接已建立!", null);
                    WriteLog("P2P连接已建立!");
                    session.Send("我与" + session.Remote + "的P2P连接已建立!", null);

                    while (true)
                    {
                        Console.Write("请输入要说的话:");
                        String line = Console.ReadLine();
                        if (String.IsNullOrEmpty(line)) continue;
                        if (line == "exit") break;

                        session.Send(line, null);
                        Console.WriteLine("已发送!");
                    }
                }
            }
            else
            {
                WriteLog("未识别的数据到来:{0} {1}", session.Remote, str);
            }
        }
Esempio n. 3
0
        void client_Received(object sender, ReceivedEventArgs e)
        {
            var session = Session.Session;
            var s = e.Stream;
            //// 如果上次还留有数据,复制进去
            //if (session.Stream != null && session.Stream.Position < session.Stream.Length)
            //{
            //    var ms = new MemoryStream();
            //    session.Stream.CopyTo(ms);
            //    s.CopyTo(ms);
            //    s = ms;
            //}
            try
            {
                Process(s, session, session.Remote);

                //// 如果还有剩下,写入数据流,供下次使用
                //if (s.Position < s.Length)
                //    session.Stream = s;
                //else
                //    session.Stream = null;
            }
            catch (Exception ex)
            {
                if (NetHelper.Debug) NetHelper.WriteLog(ex.ToString());

                // 去掉内部异常,以免过大
                if (ex.InnerException != null) ex.SetValue("_innerException", null);
                var msg = new ExceptionMessage() { Value = ex };
                session.Send(msg.GetStream());

                //// 出错后清空数据流,避免连锁反应
                //session.Stream = null;
            }
        }
		protected override void OnReceived(ReceivedEventArgs args)
		{
			CurrentStatement = args.ReceivedObject as FtpStatement;

			Console.WriteLine("[{0:000}]:{1} {2}", this.ChannelId, CurrentStatement.Name, CurrentStatement.Argument);

			base.OnReceived(args);
		}
Esempio n. 5
0
 void client_Received(object sender, ReceivedEventArgs e)
 {
     var session = Session;
     try
     {
         var message = Message.Read(e.Stream);
         Process(message, session.Remote);
     }
     catch (Exception ex)
     {
         var msg = new ExceptionMessage() { Value = ex };
         Process(msg, session.Remote);
     }
 }
Esempio n. 6
0
 private void OnIrReceive(object sender, ReceivedEventArgs e)
 {
   try
   {
     if (_commands.Any(c => c.IrCode == e.IRCode))
     {
       var cmd = _commands.First(c => c.IrCode == e.IRCode);
       Send(cmd, this);
     }
   }
   catch (Exception ex)
   {
     Log.Error("Ir receivefailed", ex);
   }
 }
Esempio n. 7
0
            /// <summary>收到客户端发来的数据。子类可通过重载该方法来修改数据</summary>
            /// <param name="e"></param>
            protected override void OnReceive(ReceivedEventArgs e)
            {
                // 解析请求头
                var stream = e.Stream;
                var entity = HttpHeader.Read(stream, HttpHeaderReadMode.Request);
                if (entity == null)
                {
                    base.OnReceive(e);
                    return;
                }

                WriteLog("{3}请求:{0} {1} [{2}]", entity.Method, entity.Url, entity.ContentLength, ID);

                Request = entity;
                if (OnRequest != null) OnRequest(this, e);

                var host = entity.Url.IsAbsoluteUri ? entity.Url.Host : Proxy.RemoteServer.Host;
                Host = host;
                RawHost = entity.Host;
                entity.Host = host;

                // 引用
                var r = entity.Referer;
                if (!String.IsNullOrEmpty(r))
                {
                    Uri ri = new Uri(r, UriKind.RelativeOrAbsolute);
                    if (ri.IsAbsoluteUri && ri.Authority == RawHost)
                    {
                        r = r.Replace(RawHost, host);
                        entity.Referer = r;
                    }
                }

                //// 取消压缩
                //var key = "Accept-Encoding";
                //if (entity.Headers.ContainsKey(key)) entity.Headers.Remove(key);

                // 重新构造请求
                var ms = new MemoryStream();
                entity.Write(ms);
                stream.CopyTo(ms);
                ms.Position = 0;

                e.Stream = ms;

                base.OnReceive(e);
            }
Esempio n. 8
0
        void ConnectionReceived(object sender, ReceivedEventArgs e)
        {
            MultichannelMessage msg;
            try
            {
                msg = (MultichannelMessage)e.Message;
            }
            catch(Exception exception)
            {
                Logger.ErrorFormat("Received invalid multichannel message: {0}", exception);
                return;
            }

            if (!channels.ContainsKey(msg.ChannelId))
            {
                Logger.Error(String.Format("Received message of type {0} on unknown channel {1} -- Will be ignored", msg.Message.GetType(), msg.ChannelId));
                return;
            }

            TunneledConnection channel = channels[msg.ChannelId];
            channel.OnReceived(new ReceivedEventArgs(msg.Message));
        }
Esempio n. 9
0
        void client_Received(object sender, ReceivedEventArgs e)
        {
            //WriteLog("数据到来:{0} {1}", e.RemoteIPEndPoint, e.GetString());

            //var ss = e.GetString().Split(":");
            var ss = e.Stream.ToStr().Split(":");
            if (ss == null || ss.Length < 2) return;

            IPAddress address = null;
            if (!IPAddress.TryParse(ss[0], out address)) return;
            Int32 port = 0;
            if (!Int32.TryParse(ss[1], out port)) return;
            var ep = new IPEndPoint(address, port);
            ParterAddress = ep;

            Client.Dispose();
            var server = Server;

            //Random rnd = new Random((Int32)DateTime.Now.Ticks);
            Thread.Sleep(Rand.Next(0, 2000));

            var client = new TcpSession();
            Client = client;
            //client.Address = server.LocalEndPoint.Address;
            //client.Port = server.LocalEndPoint.Port;
            //client.ReuseAddress = true;
            client.Local.EndPoint = server.Local.EndPoint;
            Console.WriteLine("准备连接对方:{0}", ep);
            try
            {
                //client.Connect(ep);
                client.Received += client_Received2;
                client.ReceiveAsync();

                Client.Send("Hello!");
            }
            catch (Exception ex)
            {
                WriteLog(ex.Message);
            }
        }
        private void DataChannel_Closed(object sender, EventArgs e)
        {
            var dataChannel = sender as IFtpDataChannel;
            if (dataChannel == null)
                throw new ArgumentOutOfRangeException("sender");

            dataChannel.Received -= DataChannel_Received;
            dataChannel.Error -= DataChannel_Failed;
            dataChannel.Closed -= DataChannel_Closed;

            var channel = dataChannel.ServerChannel;
            if (channel == null)
                return;

            if (channel.Status != FtpSessionStatus.Upload)
                return;
            
            var stream = channel.UpFileStream;
            channel.UpFileStream = null;

            if (stream != null)
                stream.Dispose();
            
            try
            {
                if (channel.UpFileFailed)
                    File.Delete(channel.UpFileLocalPath);
            }
            catch{ }
            
            channel.Status = FtpSessionStatus.Wait;

            if (!channel.UpFileFailed)
            {
                var statement = channel.CurrentStatement;

                channel.Send("226 Transfer complete.");

                if (statement != null &&
                    string.Equals(statement.Name, "STOR", StringComparison.OrdinalIgnoreCase))
                {
                    var args = new ReceivedEventArgs(channel, statement);
                    Task.Factory.StartNew(() => channel.Server.NotifiyReceived(args));
                }
            }

            channel.UpFileLocalPath = null;
        }
Esempio n. 11
0
 private static void Svr_Received(Object sender, ReceivedEventArgs e)
 {
     XTrace.WriteLine(e.ToStr());
 }
Esempio n. 12
0
 static void server_Received(Object sender, ReceivedEventArgs e)
 {
     OnReceive(sender as ISocketSession, e.Packet.GetStream());
 }
Esempio n. 13
0
            /// <summary>收到客户端发来的数据。子类可通过重载该方法来修改数据</summary>
            /// <param name="e"></param>
            /// <returns>修改后的数据</returns>
            protected override void OnReceiveRemote(ReceivedEventArgs e)
            {
                var pxy         = Host as HttpProxy;
                var parseHeader = pxy.EnableCache || pxy.GetHandler(EventKind.OnResponse) != null;
                var parseBody   = pxy.EnableCache || pxy.GetHandler(EventKind.OnResponseBody) != null;

                var entity = UnFinishedResponse;
                var stream = e.Packet.GetStream() as Stream;

                if (parseHeader || parseBody)
                {
                    #region 解析响应头
                    // 解析头部
                    if (entity == null)
                    {
                        #region 未完成响应为空,可能是第一个响应包,也可能是后续数据包
                        // 如果当前未完成响应为空,说明这是第一个数据包,可能包含头部
                        entity = HttpHeader.Read(stream, HttpHeaderReadMode.Response);
                        if (entity == null)
                        {
                            var he = new HttpProxyEventArgs(Response, stream);
                            if (pxy.RaiseEvent(this, EventKind.OnResponseBody, he))
                            {
                                return;
                            }
                            //e.Stream = he.Stream;
                            e.Packet = he.Stream.ReadBytes();

                            // 如果现在正在缓存之中,那么也罢这些非头部数据一并拷贝到缓存里面
                            if (cacheItem != null)
                            {
                                var ms = e.Packet.GetStream();
                                var p  = ms.Position;
                                ms.CopyTo(cacheItem.Stream);
                                var count = ms.Position = p;
                                ms.Position = p;
                                //WriteDebugLog("[{0}] {1} 缓存数据[{2}]", ID, Request.RawUrl, count);
                            }

                            base.OnReceiveRemote(e);
                            return;
                        }

                        if (!entity.IsFinish)
                        {
                            UnFinishedResponse = entity;
                        }
                        else
                        {
                            Response = entity;
                        }
                        #endregion
                    }
                    else if (!entity.IsFinish)
                    {
                        #region 未完成响应,继续读取头部
                        // 如果请求未完成,说明现在的数据内容还是头部
                        entity.ReadHeaders(stream);
                        if (entity.IsFinish)
                        {
                            Response           = entity;
                            UnFinishedResponse = null;
                        }
                        #endregion
                    }
                    else
                    {
                        #region 未完成响应的头部已完成?似乎不大可能
                        // 否则,头部已完成,现在就是内容
                        var he = new HttpProxyEventArgs(Response, stream);
                        if (pxy.RaiseEvent(this, EventKind.OnResponseBody, he))
                        {
                            return;
                        }
                        base.OnReceiveRemote(e);
                        //e.Stream = he.Stream;
                        e.Packet = he.Stream.ReadBytes();

                        // 如果现在正在缓存之中,那么也罢这些非头部数据一并拷贝到缓存里面
                        if (cacheItem != null)
                        {
                            var ms = e.Packet.GetStream();
                            var p  = ms.Position;
                            ms.CopyTo(cacheItem.Stream);
                            var count = ms.Position = p;
                            ms.Position = p;
                            //WriteDebugLog("[{0}] {1} 缓存数据[{2}]", ID, Request.RawUrl, count);
                        }

                        return;

                        #endregion
                    }
                    #endregion

                    // 请求头不完整,不发送,等下一部分到来
                    if (!entity.IsFinish)
                    {
                        return;
                    }

                    {
                        var he = new HttpProxyEventArgs(entity, stream);
                        if (pxy.RaiseEvent(this, EventKind.OnResponse, he))
                        {
                            return;
                        }
                        stream = he.Stream;
                    }

                    // 写入头部扩展
                    entity.Headers["Powered-By-Proxy"] = pxy.Name;
                    entity.Headers["RequestTime"]      = RequestTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
                    entity.Headers["TotalTime"]        = (DateTime.Now - RequestTime).ToString();
                }

                #region 缓存
                if (pxy.EnableCache)
                {
                    SetCache(Response, e);
                }
                #endregion

                #region 重构响应包
                if (entity != null)
                {
                    var ms = new MemoryStream();
                    entity.Write(ms);

                    if (parseBody && stream.Position < stream.Length)
                    {
                        var he = new HttpProxyEventArgs(Response, stream);
                        if (pxy.RaiseEvent(this, EventKind.OnResponseBody, he))
                        {
                            return;
                        }
                        stream = he.Stream;
                    }

                    stream.CopyTo(ms);
                    ms.Position = 0;

                    //stream = ms;
                    //e.Stream = ms;
                    e.Packet = ms.ToArray();
                }

                if (cacheItem != null)
                {
                    var ms = e.Packet.GetStream();
                    var p  = ms.Position;
                    ms.CopyTo(cacheItem.Stream);
                    var count = ms.Position = p;
                    ms.Position = p;
                    //WriteDebugLog("[{0}] {1} 增加缓存[{2}]", ID, Request.RawUrl, count);
                }
                #endregion

                base.OnReceiveRemote(e);
            }
Esempio n. 14
0
 private void ChannelOnReceived(ILetter letter, ReceivedEventArgs receivedEventArgs)
 {
     Received(letter, receivedEventArgs);
 }
Esempio n. 15
0
 /// <summary>
 /// 接收事件
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void TcpClient_OnReceive(object sender, ReceivedEventArgs e)
 {
     try { this.Invoke(new OnReceviceCallBack(Receive), sender, e); }
     catch (Exception ex) { YsuSoftHelper.Helper.logHelper.WriteErrLog("iTcpClient1_OnRecevice", ex); }
 }
Esempio n. 16
0
 private void session_Received(object sender, ReceivedEventArgs e)
 {
     Process(sender as ISocketSession, e);
 }
Esempio n. 17
0
 private static void Show_Incoming_PersonCreated(object sender, ReceivedEventArgs e)
 {
     Console.WriteLine(e);
 }
Esempio n. 18
0
 internal void InvokeReceivedEvent(ReceivedEventArgs args)
 {
     OnReceivedEvent?.Invoke(this, args);
 }
Esempio n. 19
0
 void Client_Received(object sender, ReceivedEventArgs e)
 {
 }
Esempio n. 20
0
 static void svr_Received(object sender, ReceivedEventArgs e)
 {
     XTrace.WriteLine(e.ToStr());
 }
Esempio n. 21
0
        static void _udpServer_Received(object sender, ReceivedEventArgs e)
        {
            var session = sender as ISocketSession;

            XTrace.WriteLine("{0} [{1}]:{2}", session.Remote, e.Stream.Length, e.Stream.ReadBytes().ToHex());
        }
Esempio n. 22
0
        void OnReceived(Object sender, ReceivedEventArgs e)
        {
            var data = e.Packet.ReadBytes();

            if (data == null || data.Length < 1)
            {
                return;
            }

            BytesOfReceived += data.Length;

            // 处理数据委托
            if (Received != null)
            {
                var e2 = new BufferEventArgs {
                    Value = data
                };
                Received(this, e2);
                if (!e2.Cancel)
                {
                    return;
                }
                // 外部可能修改了数据
                data = e2.Value;
                //if (!BufferEventArgs.Invoke(Received, data)) return null;
            }

            // 处理字符串委托
            if (ReceivedString == null)
            {
                return;
            }

            var cfg = SerialPortConfig.Current;

            var line = "";

            if (cfg.HexShow)
            {
                if (data.Length > 32)
                {
                    line = "[{0}]=\r\n{1}".F(data.Length, data.ToHex("-", 32));
                }
                else
                {
                    line = "[{0}]={1}".F(data.Length, data.ToHex("-", 32));
                }
                if (cfg.HexNewLine)
                {
                    line += Environment.NewLine;
                }
            }
            else
            {
                line = cfg.Encoding.GetString(data);
                if (_stream == null)
                {
                    _stream = new MemoryStream();
                }
                else if (_stream.Length > 10 * 1024 && _stream.Position == _stream.Length) // 达到最大大小时,从头开始使用
                {
                    _stream = new MemoryStream();
                }
                _stream.Write(data);
                _stream.Seek(-1 * data.Length, SeekOrigin.Current);

                if (_reader == null ||
                    _reader.BaseStream != _stream ||
                    _reader.CurrentEncoding != cfg.Encoding)
                {
                    _reader = new StreamReader(_stream, cfg.Encoding);
                }
                line = _reader.ReadToEnd();
                // 替换掉无效数据
                line = line.Replace("\0", null);
            }

            ReceivedString?.Invoke(this, new StringEventArgs {
                Value = line
            });
        }
Esempio n. 23
0
        private void DataChannel_Closed(object sender, EventArgs e)
        {
            var dataChannel = sender as IFtpDataChannel;

            if (dataChannel == null)
            {
                throw new ArgumentOutOfRangeException("sender");
            }

            dataChannel.Received -= DataChannel_Received;
            dataChannel.Error    -= DataChannel_Failed;
            dataChannel.Closed   -= DataChannel_Closed;

            var channel = dataChannel.ServerChannel;

            if (channel == null)
            {
                return;
            }

            if (channel.Status != FtpSessionStatus.Upload)
            {
                return;
            }

            var stream = channel.UpFileStream;

            channel.UpFileStream = null;

            if (stream != null)
            {
                stream.Dispose();
            }

            try
            {
                if (channel.UpFileFailed)
                {
                    File.Delete(channel.UpFileLocalPath);
                }
            }
            catch { }

            channel.Status = FtpSessionStatus.Wait;

            if (!channel.UpFileFailed)
            {
                var statement = channel.statement;

                channel.Send("226 Transfer complete.");

                if (statement != null &&
                    string.Equals(statement.Name, "STOR", StringComparison.OrdinalIgnoreCase))
                {
                    var args = new ReceivedEventArgs(channel, statement);
                    Task.Factory.StartNew(() => channel.Server.NotifiyReceived(args));
                }
            }

            channel.UpFileLocalPath = null;
        }
Esempio n. 24
0
 public void ItExists()
 {
     ReceivedEventArgs args = new ReceivedEventArgs("value");
 }
Esempio n. 25
0
 private void InterfaceOnDataReceived(object sender, ReceivedEventArgs receivedEventArgs)
 {
     if (_data.CheckData(receivedEventArgs.Bytes))
     {
         _sendState.Fire(SendEvent.Succes);
     }
     else
     {
         Debug.WriteLine("DataSender: ReceivePart " + _data.ModuleName);
     }
 }
Esempio n. 26
0
        private void OnReceived(Object sender, ReceivedEventArgs e)
        {
            var session = sender as NetSession;

            if (session == null)
            {
                return;
            }

            var msg = ModbusMessage.Read(e.Packet);

            if (msg == null)
            {
                return;
            }

            session.Log?.Info("<= {0}", msg);

            var rs = msg.CreateReply();

            switch (msg.Code)
            {
            case FunctionCodes.ReadCoil:
            case FunctionCodes.ReadDiscrete:
            {
                // 连续地址
                var count = (Int32)Math.Ceiling(msg.Count / 8.0);
                var addr  = msg.Address - _data[0].Address;
                if (addr >= 0 && addr + count <= _data.Count)
                {
                    rs.Payload = _data.Skip(addr).Take(count).SelectMany(e => e.Value.GetBytes()).ToArray();
                }
            }
            break;

            case FunctionCodes.ReadRegister:
            case FunctionCodes.ReadInput:
            {
                // 连续地址
                var addr = msg.Address - _data[0].Address;
                if (addr >= 0 && addr + msg.Count <= _data.Count)
                {
                    rs.Payload = _data.Skip(addr).Take(msg.Count).SelectMany(e => e.Value.GetBytes()).ToArray();
                }
            }
            break;

            case FunctionCodes.WriteCoil:
                break;

            case FunctionCodes.WriteRegister:
                break;

            case FunctionCodes.WriteCoils:
                break;

            case FunctionCodes.WriteRegisters:
                break;

            default:
                break;
            }

            session.Log?.Info("=> {0}", rs);

            session.Send(rs.ToPacket());
        }
Esempio n. 27
0
		private void Channel_Received(object sender, ReceivedEventArgs e)
		{
			this.OnReceived(e);
		}
Esempio n. 28
0
 /// <summary>收到新的Http请求,只有头部</summary>
 /// <param name="request"></param>
 /// <param name="e"></param>
 protected virtual void OnNewRequest(HttpRequest request, ReceivedEventArgs e)
 {
 }
 private static void OnReceive(object sender, ReceivedEventArgs e)
 {
     Console.WriteLine("Received: " + e.IRCode);
 }
Esempio n. 30
0
        /// <summary>收到客户端发来的数据</summary>
        /// <param name="e"></param>
        protected override void OnReceive(ReceivedEventArgs e)
        {
            if (e.Packet.Total == 0 /*|| !HttpBase.FastValidHeader(e.Packet)*/)
            {
                base.OnReceive(e);
                return;
            }

            // WebSocket 数据
            if (_websocket != null)
            {
                _websocket.Process(e.Packet);

                base.OnReceive(e);
                return;
            }

            var req     = Request;
            var request = new HttpRequest();

            if (request.Parse(e.Packet))
            {
                req = Request = request;

                WriteLog("{0} {1}", request.Method, request.Url);

                _websocket = null;
                OnNewRequest(request, e);

                // 后面还有数据包,克隆缓冲区
                if (req.IsCompleted)
                {
                    _cache = null;
                }
                else
                {
                    // 限制最大请求为1G
                    if (req.ContentLength > 1 * 1024 * 1024 * 1024)
                    {
                        var rs = new HttpResponse {
                            StatusCode = HttpStatusCode.RequestEntityTooLarge
                        };
                        Send(rs.Build());

                        Dispose();

                        return;
                    }

                    _cache = new MemoryStream(req.ContentLength);
                    req.Body.CopyTo(_cache);
                    //req.Body = req.Body.Clone();
                }
            }
            else if (req != null)
            {
                // 链式数据包
                //req.Body.Append(e.Packet.Clone());
                e.Packet.CopyTo(_cache);

                if (_cache.Length >= req.ContentLength)
                {
                    _cache.Position = 0;
                    req.Body        = new Packet(_cache);
                    _cache          = null;
                }
            }

            // 收到全部数据后,触发请求处理
            if (req != null && req.IsCompleted)
            {
                var rs = ProcessRequest(req, e);
                if (rs != null)
                {
                    var server = (this as INetSession).Host as HttpServer;
                    if (!server.ServerName.IsNullOrEmpty() && !rs.Headers.ContainsKey("Server"))
                    {
                        rs.Headers["Server"] = server.ServerName;
                    }

                    var closing = !req.KeepAlive && _websocket == null;
                    if (closing && !rs.Headers.ContainsKey("Connection"))
                    {
                        rs.Headers["Connection"] = "close";
                    }

                    Send(rs.Build());

                    if (closing)
                    {
                        Dispose();
                    }
                }
            }

            base.OnReceive(e);
        }
Esempio n. 31
0
            /// <summary>收到请求时</summary>
            /// <param name="entity"></param>
            /// <param name="e"></param>
            /// <returns></returns>
            protected virtual Boolean OnRequest(HttpHeader entity, ReceivedEventArgs e)
            {
                var host   = "";
                var oriUrl = entity.Url;

                // 特殊处理CONNECT
                if (entity.Method.EqualIgnoreCase("CONNECT"))
                {
                    return(ProcessConnect(entity, e));
                }

                // 检查缓存
                if (GetCache(entity, e))
                {
                    return(false);
                }

                var remote = RemoteServer;
                var ruri   = RemoteServerUri;

                if (entity.Url.IsAbsoluteUri)
                {
                    var uri = entity.Url;
                    host = uri.Host + ":" + uri.Port;

                    // 如果地址或端口改变,则重新连接服务器
                    if (remote != null && (uri.Host != ruri.Host || uri.Port != ruri.Port))
                    {
                        remote.Dispose();
                        RemoteServer = null;
                    }
                    //RemoteHost = uri.Host;
                    //LastPort = uri.Port;

                    //RemoteEndPoint = new IPEndPoint(NetHelper.ParseAddress(uri.Host), uri.Port);
                    ruri.Host  = uri.Host;
                    ruri.Port  = uri.Port;
                    entity.Url = new Uri(uri.PathAndQuery, UriKind.Relative);
                }
                else if (!String.IsNullOrEmpty(entity.Host))
                {
                    //RemoteEndPoint = NetHelper.ParseEndPoint(entity.Host, 80);
                    ruri.Host = entity.Host;
                    ruri.Port = 80;
                }
                else
                {
                    throw new XException("无法处理的请求!{0}", entity);
                }

                //WriteDebugLog("[{4}] {3} => {0} {1} [{2}]", entity.Method, oriUrl, entity.ContentLength, Session.Remote.EndPoint, ID);

                // 可能不含Host
                if (String.IsNullOrEmpty(entity.Host))
                {
                    entity.Host = host;
                }

                // 处理KeepAlive
                KeepAlive = false;
                if (!String.IsNullOrEmpty(entity.ProxyConnection))
                {
                    entity.KeepAlive       = entity.ProxyKeepAlive;
                    entity.ProxyConnection = null;

                    KeepAlive = entity.ProxyKeepAlive;
                }

                RequestTime = DateTime.Now;

                return(true);
            }
Esempio n. 32
0
		protected virtual void OnReceived(ReceivedEventArgs args)
		{
			//处理接收到的数据
			Utility.ProcessReceive(_executor, args);

			if(this.Received != null)
				this.Received(this, args);
		}
 private void OnRecieved(object sender, ReceivedEventArgs e)
 {
     _lastReceivedCode = e.IRCode;
     _waitHandle.Set();
 }
Esempio n. 34
0
 private void OnReceived(object sender, ReceivedEventArgs e)
 {
     lock (testLock)
     {
         IList<ArraySegment<byte>> buffers = e.Buffers;
         ArraySegment<byte> pong = buffers[0];
         clientResult = UTF8Encoding.Default.GetString(pong.Array);
         Monitor.Pulse(testLock);
     }
 }
Esempio n. 35
0
 private void Session_Received(object sender, ReceivedEventArgs e)
 {
     e.Feedback = true;
 }
Esempio n. 36
0
 private void RaiseReceived(ReceivedEventArgs e)
 {
     Received?.Invoke(this, e);
 }
Esempio n. 37
0
 private void ChannelReceived(ILetter letter, ReceivedEventArgs receivedEventArgs)
 {
     Action<ILetter, IReceivedEventArgs> evnt = Received;
     if(evnt != null) {
         receivedEventArgs.Socket = this;
         evnt(letter, receivedEventArgs);
     }
 }
Esempio n. 38
0
        /// <summary>处理收到的数据</summary>
        /// <param name="e"></param>
        protected override void OnReceive(ReceivedEventArgs e)
        {
            //base.OnReceive(e);

            var stream = e.Packet.GetStream();

            // 第一个数据包解析头部
            if (e.Packet.Total > 0 && Inf == null)
            {
                var fi = new FileFormat();
                try
                {
                    fi.Read(stream);

                    if (fi.Checksum != fi.Crc)
                    {
                        throw new XException("文件{0}校验和错误{1:X8}!={2:X8}!", fi.Name, fi.Checksum, fi.Crc);
                    }
                }
                catch (Exception ex)
                {
                    WriteError("无法解析文件头!{0}", ex.Message);
                    // 如果加载失败,则关闭会话
                    Dispose();
                    return;
                }
                Inf    = fi;
                Length = 0;
                if (StartTime == DateTime.MinValue)
                {
                    StartTime = Session.StartTime;
                }

                // 加大网络缓冲区
                Session.Client.ReceiveBufferSize = 8 * 1024 * 1024;

                var file = Host.SavedPath.CombinePath(Inf.Name).EnsureDirectory();
                Stream = file.AsFile().OpenWrite();
                WriteLog("接收{0},{1:n0}kb", Inf.Name, Inf.Length / 1024);

                if (stream.Position >= stream.Length)
                {
                    return;
                }
            }

            var len = stream.Length - stream.Position;

            if (len > 0)
            {
                Length += len;
                var ms    = (DateTime.Now - StartTime).TotalMilliseconds;
                var speed = Length / 1024 / ms * 1000;
                WriteLog("收到{0:n0}字节,{1:n0}kb/s,完成{2:p}", len, (Int32)speed, (Double)Length / Inf.Length);
                if (Stream != null && Stream.CanWrite)
                {
                    Stream.Write(stream);
                }
                //}
                //else
                //{
                if (Length >= Inf.Length)
                {
                    //var ms = (DateTime.Now - StartTime).TotalMilliseconds;
                    //var speed = Length / 1024 / ms * 1000;
                    WriteLog("{0}接收完成,{1:n0}ms,{2:n0}kb/s", Inf.Name, (Int32)ms, (Int32)speed);
                    //Dispose();

                    // 清空,方便接收下一个文件
                    Inf = null;
                    CloseStream();
                    StartTime = DateTime.MinValue;
                }
            }
        }
Esempio n. 39
0
 private void ReadCallback(IAsyncResult ar)
 {
     string content = string.Empty;
     StringBuilder rb = new StringBuilder();
     PanelLibrary state = (PanelLibrary)ar.AsyncState;
     if (state.WorkSocket != null && state.WorkSocket.Connected)
     {
         try
         {
             Socket handler = state.WorkSocket;
             int bytesRead = handler.EndReceive(ar);
             if (bytesRead > 0)
             {
                 List<byte> raw = new List<byte>();
                 for (int loop = 0; loop < bytesRead; loop++)
                 {
                     raw.Add(state.Buffer[loop]);
                 }
                 Decode translate = new Decode();
                 translate.ToReadable(state.Buffer, 0, bytesRead);
                 rb.Length = 0;
                 rb.AppendFormat("[recv: {0,4} bytes on {1:H:mm:ss.fff} port: {2,5}]\t{3}", bytesRead, DateTime.Now, state.WorkSocket.Handle, translate.Decoded);
                 ReceivedEventArgs de = new ReceivedEventArgs();
                 de.Message = rb.ToString();
                 de.ClientSocket = state.WorkSocket;
                 de.Raw = raw;
                 Events.DoReceived(this, de);
                 Array.Clear(state.Buffer, 0, bytesRead);
                 handler.BeginReceive(state.Buffer, 0, state.BufferSize, 0, new AsyncCallback(ReadCallback), state);
             }
         }
         catch (ObjectDisposedException)
         {
             ClientDisconnected(state);
             _clientSockets.Remove(state.WorkSocket);
         }
         catch (SocketException se)
         {
             if (se.SocketErrorCode == SocketError.WouldBlock ||
                       se.SocketErrorCode == SocketError.IOPending ||
                       se.SocketErrorCode == SocketError.NoBufferSpaceAvailable)
             {
                 return;
             }
             else
             {
                 StringBuilder sb = new StringBuilder();
                 sb.AppendFormat("ReadCallback({0}) Socket Exception - {1}", se.SocketErrorCode, se.Message);
                 Events.DoLog(this, sb.ToString());
                 ClientDisconnected(state);
                 _clientSockets.Remove(state.WorkSocket);
             }
         }
     }
 }
Esempio n. 40
0
 private void SocketTcpClient_OnRecevice(object sender, ReceivedEventArgs e)
 {
     this.received   += " " + e.ReceivedHexString;
     this.Infos.Timer = 0;
 }
Esempio n. 41
0
 void client_Received2(object sender, ReceivedEventArgs e)
 {
     var session = sender as ISocketSession;
     WriteLog("数据到来2:{0} {1}", session.Remote, e.Stream.ToStr());
 }
Esempio n. 42
0
 private void SocketTcpServer_TcpServerRecevice(Socket temp, ReceivedEventArgs e)
 {
     this.received   += " " + e.ReceivedHexString;
     this.Infos.Timer = 0;
 }
Esempio n. 43
0
 internal new void OnReceived(ReceivedEventArgs e)
 {
     base.OnReceived(e);
 }
Esempio n. 44
0
		protected override void OnReceived(ReceivedEventArgs args)
		{
			var statement = args.ReceivedObject as FtpStatement;
			object result = null;

			if(statement != null)
			{
				try
				{
					result = _commandExecutor.Execute(statement.Name, args);
				}
				catch(CommandNotFoundException)
				{
					args.Channel.Send("502 Command not implemented.", null);
				}
			}

			if(result != null)
			{
				//调用基类同名方法
				base.OnReceived(new ReceivedEventArgs(args.Channel, result));
			}
		}
Esempio n. 45
0
			public object Execute(string name, ReceivedEventArgs args)
			{
				return base.Execute(name, args);
			}
Esempio n. 46
0
 void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
 {
     StringBuilder sb = new StringBuilder();
     if (_serialPort != null)
     {
         int numBytes = _serialPort.BytesToRead;
         List<byte> newReceived = new List<byte>();
         for (int count = 0; count < numBytes; count++)
         {
             newReceived.Add((byte)_serialPort.ReadByte());
         }
         Decode dec = new Decode();
         dec.ToReadable(newReceived.ToArray());
         sb.Length = 0;
         sb.AppendFormat("[recv: {0,4} bytes on {1:H:mm:ss.fff}]{2}", newReceived.Count, DateTime.Now, dec.Decoded);
         ReceivedEventArgs de = new ReceivedEventArgs();
         de.Message = sb.ToString();
         de.Port = _serialPort.PortName;
         de.Raw = newReceived;
         Events.DoReceived(this, de);
     }
 }
Esempio n. 47
0
        void client_PlaintextReceived(object sender, ReceivedEventArgs<string> e)
        {
            JsonMutualObject JsonMutualObject1 = new JsonMutualObject();
            this.txtReceive.Dispatcher.Invoke(new Action(() => { txtReceive.Text = e.Datagram;
            if (e.Datagram.IndexOf(ConfigurationManager.AppSettings["CustomTerminatorSign"])>0)  //判断当前服务器端返回的消息是否有终结符,如果没有,则表示信息丢失了,或传输不完整。
            {
                string BackInfo = e.Datagram.Replace(ConfigurationManager.AppSettings["CustomTerminatorSign"], "");
                if (BackInfo.IndexOf("Welcome:") == 0)  //判断是否是连接服务器之后,服务器返回的欢迎消息。
                {
                    string msgTmp = BackInfo.Replace("Welcome:", ""); //Welcome:为和服务器端约定的业务协议简述。然后再把终结符也取消掉。剩下的就是一个标准的json
                    BasicMsgEntity deviceLoginEntity = JsonMutualObject1.ScriptDeserialize<BasicMsgEntity>(msgTmp);  //Json字符串转换为类
                    if (deviceLoginEntity != null)
                    {
                        SessionID_Temp = deviceLoginEntity.key;
                    }
                }
                else if (BackInfo.IndexOf("DeviceLogin:"******"\"status\": 1")>0)  //status:1表示登录成功
                    {
                        btnUserLogin.IsEnabled = false;
                    }
                }
                else if (BackInfo.IndexOf("TerminalEquipment:") == 0)  //服务器端发来的“终端指令信息。”,CommandTypeId表示发送的指令类型,1表示开机,2表示关机,3表示重启,4表示播放,5表示停止,6表示暂停,7表示文字类时时公告信息
                {
                    #region//模拟已经成功执行指令,返回正确信息给服务器
                    string msgTmp = BackInfo.Replace("TerminalEquipment:", "");
                    TerminalEquipmentSerialCommand_EntityModel terminalEquipmentEntity = JsonMutualObject1.ScriptDeserialize<TerminalEquipmentSerialCommand_EntityModel>(msgTmp);  //Json字符串转换为类
                    if (terminalEquipmentEntity!=null)
                    {
                        if (terminalEquipmentEntity.status==0)
                        {
                            MessageBox.Show(terminalEquipmentEntity.msg);
                        }
                        else
                        {
                            string ReadySendMsg = "TerminalEquipment:";  //分号前面表示 大的业务类别简述,是一个和服务器端通讯的约定。此时表示服务器发送的 终端指令信息
                            JsonObjectCollection delivered = new JsonObjectCollection();
                            delivered.Add(new JsonStringValue("ReceiveBackTime", DateTime.Now.ToString()));
                            delivered.Add(new JsonStringValue("msg", "客户端已成功执行终端指令"));
                            delivered.Add(new JsonNumericValue("TerSerialCommandID", Convert.ToInt32(terminalEquipmentEntity.TerSerialCommandID)));
                            delivered.Add(new JsonNumericValue("status", 1));
                            ReadySendMsg = ReadySendMsg + delivered.ToString();
                            client.Send(ReadySendMsg);
                        }
                    }
                    #endregion
                }
                else if (BackInfo.IndexOf("TerminalProgram:") == 0)  //服务器端发来的“节目制作信息。”
                {
                    #region//模拟已经成功执行指令,返回正确信息给服务器
                    string msgTmp = BackInfo.Replace("TerminalProgram:", "");
                    try
                    {
                        ProgramSendSerialList_EntityModel programSendSerialList_EntityModel = JsonMutualObject1.ScriptDeserialize<ProgramSendSerialList_EntityModel>(msgTmp);  //Json字符串转换为类
                        if (programSendSerialList_EntityModel != null)
                        {
                            if (programSendSerialList_EntityModel.status == 0)
                            {
                                MessageBox.Show(programSendSerialList_EntityModel.msg);
                            }
                            else
                            {
                                string ReadySendMsg = "TerminalProgram:";  //分号前面表示 大的业务类别简述,是一个和服务器端通讯的约定。此时表示服务器发送的 终端指令信息
                                JsonObjectCollection delivered = new JsonObjectCollection();
                                delivered.Add(new JsonStringValue("ReceiveBackTime", DateTime.Now.ToString()));
                                delivered.Add(new JsonStringValue("msg", "客户端已成功执行终端指令"));
                                delivered.Add(new JsonNumericValue("ProgramSendSerialID", Convert.ToInt32(programSendSerialList_EntityModel.ProgramSendSerialID)));
                                delivered.Add(new JsonNumericValue("status", 1));
                                ReadySendMsg = ReadySendMsg + delivered.ToString();
                                client.Send(ReadySendMsg);
                            }
                        }
                    }
                    catch //(Exception)
                    {
                        string ReadySendMsg = "TerminalProgram:";  //分号前面表示 大的业务类别简述,是一个和服务器端通讯的约定。此时表示服务器发送的 终端指令信息
                        JsonObjectCollection delivered = new JsonObjectCollection();
                        delivered.Add(new JsonStringValue("ReceiveBackTime", DateTime.Now.ToString()));
                        delivered.Add(new JsonStringValue("msg", "客户端接收到的json格式不对,疑似数据包丢失"));
                        delivered.Add(new JsonNumericValue("ProgramSendSerialID", 0));
                        delivered.Add(new JsonNumericValue("status", 0));
                        ReadySendMsg = ReadySendMsg + delivered.ToString();
                        client.Send(ReadySendMsg);
                    }
                    #endregion
                }
            }

            }));
        }
        /// <summary>
        /// 开始接收网关上传的数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void socketServer_OnDataReceived(object sender, ReceivedEventArgs <byte[]> e)
        {
            AsyncSocketConnection conn = (AsyncSocketConnection)sender;
            TPKGHead packet            = new TPKGHead();
            bool     isOk = false;

            try
            {
                isOk = packet.Parse(e.Data);//解析收到的数据包
                log.Info($"SensorNetwork.Server.Management.Framework中接收的包,Serv_Type:" + packet.Serv_Type + ",Serv_Code:" + packet.Serv_Code + "包数据域Data:\r\n{" + packet.Data.ToBytes().ToHexString() + "}");
                if (isOk == false)
                {
                    log.Error($"包解析错误:\r\n{BitConverter.ToString(e.Data).Replace("-", " ")}");
                }
                else
                {
                    log.Info($"包解析成功(16进制):\r\n{BitConverter.ToString(e.Data).Replace("-", " ")}");
                    log.Info($"包数据域:\r\n{packet.Data.ToString()}");
                }

                bool isNew = isOk && string.IsNullOrWhiteSpace(conn.TerminalId) && string.IsNullOrWhiteSpace(packet.Term_Code) == false;
                if (isNew)
                {
                    AddLog(packet.Term_Code, "设备已连接。");
                }
                if (string.IsNullOrWhiteSpace(packet.Term_Code) == false)
                {
                    conn.TerminalId             = packet.Term_Code;
                    lastAlive[packet.Term_Code] = Tuple.Create(conn.Token, DateTime.Now);
                    //if (conn.Protocol == null)
                    //    conn.Protocol = ProtocolManager.Find(packet.Term_Code);
                    var s = Newtonsoft.Json.JsonConvert.SerializeObject(packet.Data);
                    AddLog(packet.Term_Code, packet.Data, "收到数据包:Data:{0}", packet.Data.ToString());
                }
                Interlocked.Increment(ref receivedMessageCount);
                conn.LastAlive = DateTime.Now;//更新连接的最后活动时间
                //else
                //{
                //    var json = Newtonsoft.Json.JsonConvert.SerializeObject(packet.Data, Newtonsoft.Json.Formatting.Indented);
                //    log.DebugFormat("{0}\nMACID: {1}\n{2}", packet., packet.Id, json);
                //}


                if (isOk)                                         //如果解析成功
                {
                    ackQueue.Enqueue(Tuple.Create(conn, packet)); //将接收到的数据包放到队列中
                    if (isNew)                                    //如果是一条新的连接,则创建一条新的连接写入DB中
                    {
                        newConnections.Enqueue(new TerminalConnectionLog()
                        {
                            id           = conn.Token,//guid
                            connected    = conn.Created,
                            ipaddress    = conn.RemoteEndPoint.ToString(),
                            server_id    = ServerId,
                            terminal_id  = conn.TerminalId,
                            disconnected = conn.Created,
                        });
                        conn.Closed += AsyncSocketConnection_Closed;
                        log.DebugFormat("new client: {0}", conn.TerminalId);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error($"包解析/处理异常:\r\n{BitConverter.ToString(e.Data).Replace("-", " ")}");
                log.Error(ex);
            }
        }
Esempio n. 49
0
        void client_Received2(Object sender, ReceivedEventArgs e)
        {
            var session = sender as ISocketSession;

            WriteLog("数据到来2:{0} {1}", session.Remote, e.Stream.ToStr());
        }
Esempio n. 50
0
        void OnReceive(object sender, ReceivedEventArgs e)
        {
            Boolean valid = false;
            var     code  = e.IRCode;
            var     now   = DateTime.UtcNow;

            // we keep track of when we see codes so we don't fire too often
            lock (this.Locker) {
                DateTime lastTime;
                if (this.LastSeen.TryGetValue(code, out lastTime))
                {
                    if (now - lastTime > MinimumDuration)
                    {
                        valid = true;
                    }
                }
                else
                {
                    valid = true;
                }

                if (valid)
                {
                    this.LastSeen[code] = now;
                }
            }

            //Console.WriteLine("IR RX: " + e.IRCode + " " + valid);

            if (!valid)
            {
                return;
            }

            GenericCommand ev = null;

            switch (code)
            {
            // OK button
            case "230A011050A5":
                ev = this.OnDvrOk;
                break;

            // Red C button
            case "2308041050A5":
                ev = this.OnDvrAv;
                break;

            case "2308151050A5":
                ev = this.OnDvrChannelUp;
                break;

            case "2308150450A5":
                ev = this.OnDvrChannelDown;
                break;

            case "435B541051F4":
                ev = this.OnOppoOk;
                break;

            default:

                break;
            }

            if (ev != null)
            {
                ev();
            }
        }
Esempio n. 51
0
		internal void NotifiyReceived(ReceivedEventArgs args)
		{
			var statement = args.ReceivedObject as FtpStatement;
			if(statement != null)
			{
				//Console.WriteLine("{0}:{1}:{2}", statement.Name, statement.Argument, statement.Result);
			}

			base.OnReceived(args);
		}
Esempio n. 52
0
        void server_Received(Object sender, ReceivedEventArgs e)
        {
            var session = sender as ISocketSession;

            var str    = e.Stream.ToStr();
            var remote = "" + session.Remote.EndPoint;

            if (remote == "" + HoleServer)
            {
                WriteLog("HoleServer数据到来:{0} {1}", session.Remote, str);

                var ss = str.Split(":");
                if (ss == null || ss.Length < 2)
                {
                    return;
                }

                IPAddress address = null;
                if (!IPAddress.TryParse(ss[0], out address))
                {
                    return;
                }
                var port = 0;
                if (!Int32.TryParse(ss[1], out port))
                {
                    return;
                }
                var ep = new IPEndPoint(address, port);
                ParterAddress = ep;

                Console.WriteLine("准备连接对方:{0}", ep);
                while (Success <= 0)
                {
                    (Server as UdpServer).Client.Send("Hello!", null, ep);

                    Thread.Sleep(100);
                    if (Success > 0)
                    {
                        break;
                    }
                    Thread.Sleep(3000);
                }
            }
            else if (remote == "" + ParterAddress)
            {
                WriteLog("Parter数据到来:{0} {1}", session.Remote, str);
                //Success = true;
                if (Success > 0)
                {
                    Success++;
                }

                //var session = e.Session;
                if (session != null)
                {
                    session.Send("P2P连接已建立!", null);
                    WriteLog("P2P连接已建立!");
                    session.Send("我与" + session.Remote + "的P2P连接已建立!", null);

                    while (true)
                    {
                        Console.Write("请输入要说的话:");
                        var line = Console.ReadLine();
                        if (String.IsNullOrEmpty(line))
                        {
                            continue;
                        }
                        if (line == "exit")
                        {
                            break;
                        }

                        session.Send(line, null);
                        Console.WriteLine("已发送!");
                    }
                }
            }
            else
            {
                WriteLog("未识别的数据到来:{0} {1}", session.Remote, str);
            }
        }
Esempio n. 53
0
        //List<String> process = new List<String>();
        void Udp_Received(Object sender, ReceivedEventArgs e)
        {
            var content = e.Packet.ToStr();

            if (String.IsNullOrEmpty(content))
            {
                return;
            }

            //var udp = e as UdpReceivedEventArgs;

            var remote  = e.Remote;
            var address = remote.Address;

            WriteLog("发现UPnP设备:{0}", remote);

            //分析数据并反序列化
            var sp = "LOCATION:";
            var p  = content.IndexOf(sp);

            if (p <= 0)
            {
                return;
            }

            var url = content.Substring(p + sp.Length);

            p = url.IndexOf(Environment.NewLine);
            if (p <= 0)
            {
                return;
            }

            url = url.Substring(0, p);
            url = url.Trim();
            if (String.IsNullOrEmpty(url))
            {
                return;
            }

            try
            {
                //下载IGD.XML
                var client = new WebClient();
                var xml    = client.DownloadString(url);
                if (xml != null)
                {
                    xml = xml.Trim();
                }

                var uri = new Uri(url);
                if (CacheGateway)
                {
                    File.WriteAllText(GetCacheFile(uri.Host), xml);
                }

                AddGateway(uri.Host, xml, false);
            }
            catch (Exception ex)
            {
                WriteLog(ex.Message + " 路径[" + url + "]");
                throw;
            }
        }
 private void FooUserControl_OnSomethingReceived(object sender, ReceivedEventArgs e)
 {
     Debug.WriteLine("Received: " + e.Data);
 }
 protected virtual void OnDataReceived(ReceivedEventArgs e)
 {
     EventHandler<ReceivedEventArgs> handler = DataReceived;
     if (handler != null) handler(this, e);
 }
Esempio n. 56
0
 static void server_Received(object sender, ReceivedEventArgs e)
 {
     OnReceive(sender as ISocketSession, e.Stream);
 }
Esempio n. 57
0
		private void RaiseReceived(object receivedObject)
		{
			//更新最后接收到数据的时间,因为空包也要计算在内,所以必须放在下面的条件判断之前
			this.LastReceivedTime = DateTime.Now;

			//创建接收数据事件参数对象
			var eventArgs = new ReceivedEventArgs(this, receivedObject);

			//启动一个新异步任务进行事件回调
			System.Threading.Tasks.Task.Factory.StartNew(() =>
			{
				//激发当前通道的“Received”事件
				this.OnReceived(eventArgs);

				//如果接收到的对象是流则关闭它
				if(receivedObject is Stream)
					((Stream)receivedObject).Dispose();
			});
		}
Esempio n. 58
0
            /// <summary>收到客户端发来的数据。子类可通过重载该方法来修改数据</summary>
            /// <remarks>
            /// 如果数据包包括头部和主体,可以分开处理。
            /// 最麻烦的就是数据包不是一个完整的头部,还落了一部分在后面的包上。
            /// </remarks>
            /// <param name="e"></param>
            protected override void OnReceive(ReceivedEventArgs e)
            {
                if (e.Packet.Total == 0)
                {
                    base.OnReceive(e);
                    return;
                }

                var pxy = Host as HttpProxy;

                #region 解析请求头
                // 解析请求头。
                var stream = e.Packet.GetStream() as Stream;
                // 当前正在处理的未完整的头部,浏览器可能把请求头分成几块发过来
                var entity = UnFinishedRequest;
                // 如果当前请求为空,说明这是第一个数据包,可能包含头部
                if (entity == null)
                {
                    // 读取并分析头部
                    entity = HttpHeader.Read(stream, HttpHeaderReadMode.Request);
                    if (entity == null)
                    {
                        // 分析失败?这个可能不是Http请求头
                        var he = new HttpProxyEventArgs(Request, stream);
                        if (pxy.RaiseEvent(this, EventKind.OnRequestBody, he))
                        {
                            return;
                        }
                        //e.Stream = he.Stream;
                        e.Packet = he.Stream.ReadBytes();

                        base.OnReceive(e);

                        return;
                    }

                    // 根据完成情况保存到不同的本地变量中
                    if (!entity.IsFinish)
                    {
                        UnFinishedRequest = entity;
                    }
                    else
                    {
                        Request = entity;
                    }
                }
                else if (!entity.IsFinish)
                {
                    // 如果请求未完成,说明现在的数据内容还是头部
                    entity.ReadHeaders(stream);
                    if (entity.IsFinish)
                    {
                        Request           = entity;
                        UnFinishedRequest = null;
                    }
                }
                else
                {
                    // 否则,头部已完成,现在就是内容,直接转发
                    var he = new HttpProxyEventArgs(Request, stream);
                    if (pxy.RaiseEvent(this, EventKind.OnRequestBody, he))
                    {
                        return;
                    }
                    //e.Stream = he.Stream;
                    e.Packet = he.Stream.ReadBytes();

                    base.OnReceive(e);

                    return;
                }

                // 请求头不完整,不发送,等下一部分到来
                if (!entity.IsFinish)
                {
                    return;
                }
                #endregion

                WriteLog("{0}", entity.Url);

                #region 重构请求包
                // 现在所在位置是一个全新的请求
                var rs = OnRequest(entity, e);
                {
                    var he = new HttpProxyEventArgs(Request, stream)
                    {
                        Cancel = !rs
                    };
                    rs = !pxy.RaiseEvent(this, EventKind.OnRequest, he);
                }
                if (!rs)
                {
                    return;
                }

                // 如果流中还有数据,可能是请求体,也要拷贝
                if (stream.Position < stream.Length)
                {
                    var he = new HttpProxyEventArgs(Request, stream);
                    if (pxy.RaiseEvent(this, EventKind.OnRequestBody, he))
                    {
                        return;
                    }
                    stream = he.Stream;
                }

                // 重新构造请求
                var ms = new MemoryStream();
                entity.Write(ms);
                stream.CopyTo(ms);
                ms.Position = 0;

                //e.Stream = ms;
                e.Packet = ms.ToArray();
                #endregion

                base.OnReceive(e);
            }
Esempio n. 59
0
 void Client_Received(object sender, ReceivedEventArgs e)
 {
 }
Esempio n. 60
0
 public object Execute(string name, ReceivedEventArgs args)
 {
     return(base.Execute(name, args));
 }