Example #1
0
        private void _server_OnReceive(object currentObj, byte[] data)
        {
            var ut = (WSUserToken)(currentObj);

            try
            {
                if (!ut.IsHandSharked)
                {
                    byte[] resData = null;

                    var result = ut.GetReplayHandShake(data, out resData);

                    if (result)
                    {
                        _server.SendAsync(ut.ID, resData);
                        ut.IsHandSharked = true;
                        lock (_locker)
                            Clients.Add(ut.ID);
                        OnConnected?.Invoke(ut.ID);
                    }
                }
                else
                {
                    var coder = (WSCoder)ut.Unpacker;
                    coder.Unpack(data, (d) =>
                    {
                        var wsProtocal = (WSProtocal)d;
                        switch (wsProtocal.Type)
                        {
                        case (byte)WSProtocalType.Close:
                            ReplyClose(ut.ID, wsProtocal);
                            break;

                        case (byte)WSProtocalType.Ping:
                            ReplyPong(ut.ID, wsProtocal);
                            break;

                        case (byte)WSProtocalType.Binary:
                        case (byte)WSProtocalType.Text:
                        case (byte)WSProtocalType.Cont:
                            OnMessage?.Invoke(ut.ID, (WSProtocal)d);
                            break;

                        case (byte)WSProtocalType.Pong:
                            break;

                        default:
                            var error = string.Format("收到未定义的Opcode={0}", d.Type);
                            break;
                        }
                    }, (h) => { }, null);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("WServer.OnReceive.Error", ex);
                _server.Disconnecte(ut.ID);
            }
        }
Example #2
0
 private void _udpServer_OnReceive(ISession currentSession, byte[] data)
 {
     Parallel.ForEach(_cache.Keys, (id) =>
     {
         try
         {
             _udpServer.SendAsync(id, data);
         }
         catch { }
     });
 }
Example #3
0
        private async void HandleRequest(string sessionID, byte[] data)
        {
            DnsRequestMessage request = null;

            try
            {
                request = DnsRequestMessage.FromArray(data);

                OnEvent(OnRequested, new RequestedEventArgs(request, data));

                IResponse response = await _coder.Code(request);

                OnEvent(OnResponded, new RespondedEventArgs(request, response, data));

                _udpServer.SendAsync(sessionID, response.ToArray());
            }
            catch (SocketException e) { OnError(e); }
            catch (ArgumentException e) { OnError(e); }
            catch (IndexOutOfRangeException e) { OnError(e); }
            catch (OperationCanceledException e) { OnError(e); }
            catch (IOException e) { OnError(e); }
            catch (ObjectDisposedException e) { OnError(e); }
            catch (ResponseException e)
            {
                IResponse response = e.Response;

                if (response == null)
                {
                    response = DnsResponseMessage.FromRequest(request);
                }

                try
                {
                    _udpServer.SendAsync(sessionID, response.ToArray());
                }
                catch (SocketException) { }
                catch (OperationCanceledException) { }
                finally { OnError(e); }
            }
        }
Example #4
0
        private void _udpServer_OnReceive(ISession currentSession, byte[] data)
        {
            var userToken = (IUserToken)currentSession;

            Parallel.ForEach(_cache.Keys, (id) =>
            {
                try
                {
                    //if (id != userToken.ID)
                    _udpServer.SendAsync(id, data);
                }
                catch { }
            });
        }
Example #5
0
        void BaseReply(string id, ProtocalType protocalType, byte[] data)
        {
            var p = new BaseSocketProtocal();

            p.Type    = (byte)protocalType;
            p.Content = data;
            if (p.Content != null)
            {
                p.BodyLength = p.Content.Length;
            }
            else
            {
                p.BodyLength = 0;
            }
            _udpServer.SendAsync(id, p.ToBytes());
        }
Example #6
0
 /// <summary>
 /// SendAsync
 /// </summary>
 /// <param name="id"></param>
 /// <param name="baseSocketProtocal"></param>
 protected void SendAsync(string id, BaseSocketProtocal baseSocketProtocal)
 {
     _udpServer.SendAsync(id, baseSocketProtocal.ToBytes());
 }
Example #7
0
        /// <summary>
        /// 回复
        /// </summary>
        /// <param name="userToken"></param>
        /// <param name="msg"></param>
        internal void Reply(IUserToken userToken, RSocketMsg msg)
        {
            var data = ((RUnpacker)userToken.Unpacker).Encode(msg);

            _server.SendAsync(userToken.ID, data);
        }
Example #8
0
 private void _classificationBatcher_OnBatched(string id, byte[] data)
 {
     _server.SendAsync(id, data);
 }
Example #9
0
 public void Send(IUserToken userToken, byte[] data)
 {
     _serverSokcet.SendAsync(userToken.ID, data);
 }
Example #10
0
 /// <summary>
 /// SendAsync
 /// </summary>
 /// <param name="id"></param>
 /// <param name="data"></param>
 public void SendAsync(string id, byte[] data)
 {
     _serverSokcet.SendAsync(id, data);
 }
Example #11
0
 public void SendAsync(string id, JT808Package jT808Package)
 {
     _serverSokcet.SendAsync(id, new JT808Serializer().Serialize(jT808Package));
 }