Ejemplo n.º 1
0
        /// <summary>
        /// 当客户端的socket登录的时候额外检查的信息
        /// </summary>
        /// <param name="socket">套接字</param>
        /// <param name="endPoint">终结点</param>
        /// <returns>验证的结果</returns>
        protected override OperateResult SocketAcceptExtraCheck(Socket socket, IPEndPoint endPoint)
        {
            if (IsUseAccountCertificate)
            {
                OperateResult <byte[], byte[]> receive = ReceiveAndCheckBytes(socket, 2000);
                if (!receive.IsSuccess)
                {
                    return(new OperateResult(string.Format("Client login failed[{0}]", endPoint)));
                }

                if (BitConverter.ToInt32(receive.Content1, 0) != HslProtocol.ProtocolAccountLogin)
                {
                    LogNet?.WriteError(ToString( ), StringResources.Language.NetClientAccountTimeout);
                    socket?.Close( );
                    return(new OperateResult(string.Format("Client login failed[{0}]", endPoint)));
                }

                string[] infos = HslProtocol.UnPackStringArrayFromByte(receive.Content2);
                string   ret   = CheckAccountLegal(infos);
                SendStringAndCheckReceive(socket, ret == "success" ? 1 : 0, new string[] { ret });

                if (ret != "success")
                {
                    return(new OperateResult(string.Format("Client login failed[{0}]:{1}", endPoint, ret)));
                }

                LogNet?.WriteDebug(ToString( ), string.Format("Account Login:{0} Endpoint:[{1}]", infos[0], endPoint));
            }
            return(OperateResult.CreateSuccessResult( ));
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 数据处理中心
 /// </summary>
 /// <param name="session">当前的会话</param>
 /// <param name="protocol">协议指令头</param>
 /// <param name="customer">客户端信号</param>
 /// <param name="content">触发的消息内容</param>
 internal override void DataProcessingCenter(AppSession session, int protocol, int customer, byte[] content)
 {
     //接收数据完成,进行事件通知,优先进行解密操作
     if (protocol == HslProtocol.ProtocolCheckSecends)
     {
         // 初始化时候的测试消息
         session.HeartTime = DateTime.Now;
         SendMessage(session, customer, content);
     }
     else if (protocol == HslProtocol.ProtocolUserBytes)
     {
         // 字节数据
         OnReceivedBytesEvent(session, customer, content);
     }
     else if (protocol == HslProtocol.ProtocolUserString)
     {
         // 字符串数据
         OnReceiveStringEvent(session, customer, Encoding.Unicode.GetString(content));
     }
     else if (protocol == HslProtocol.ProtocolUserStringArray)
     {
         // 字符串数组
         OnReceiveStringArrayEvent(session, customer, HslProtocol.UnPackStringArrayFromByte(content));
     }
     else
     {
         // 数据异常
         session?.WorkSocket?.Close( );
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 客户端向服务器进行请求,请求字符串数组,忽略了自定义消息反馈
        /// </summary>
        /// <param name="customer">用户的指令头</param>
        /// <param name="send">发送数据</param>
        /// <returns>带返回消息的结果对象</returns>
        public OperateResult <string[]> ReadFromServer(NetHandle customer, string[] send)
        {
            var read = ReadFromServerBase(HslProtocol.CommandBytes(customer, Token, send));

            if (!read.IsSuccess)
            {
                return(OperateResult.CreateFailedResult <string[]>(read));
            }

            return(OperateResult.CreateSuccessResult(HslProtocol.UnPackStringArrayFromByte(read.Content)));
        }
        /// <summary>
        /// [自校验] 从网络中接收一个字符串数组,如果结果异常,则结束通讯
        /// </summary>
        /// <param name="socket">套接字</param>
        /// <returns>包含是否成功的结果对象</returns>
        protected OperateResult <int, string[]> ReceiveStringArrayContentFromSocket(Socket socket)
        {
            OperateResult <byte[], byte[]> receive = ReceiveAndCheckBytes(socket, 10000);

            if (!receive.IsSuccess)
            {
                return(OperateResult.CreateFailedResult <int, string[]>(receive));
            }

            // 检查是否是字符串信息
            if (BitConverter.ToInt32(receive.Content1, 0) != HslProtocol.ProtocolUserStringArray)
            {
                LogNet?.WriteError(ToString( ), StringResources.Language.CommandHeadCodeCheckFailed);
                socket?.Close( );
                return(new OperateResult <int, string[]>(StringResources.Language.CommandHeadCodeCheckFailed));
            }

            if (receive.Content2 == null)
            {
                receive.Content2 = new byte[4];
            }
            return(OperateResult.CreateSuccessResult(BitConverter.ToInt32(receive.Content1, 4), HslProtocol.UnPackStringArrayFromByte(receive.Content2)));
        }