Exemplo n.º 1
0
        public override void OnReceiveTimeout(string clientAddress, byte[] receiveData)
        {
            try
            {
                BufferReader reader      = new BufferReader(receiveData);
                string       paramString = reader.ReadPacketString();
                paramString = HttpUtility.UrlDecode(paramString, Encoding.UTF8);
                int index = paramString.IndexOf("?d=");
                if (index != -1)
                {
                    index      += 3;
                    paramString = paramString.Substring(index, paramString.Length - index);
                }
                PacketMessage receivePacket = ParsePacketMessage(clientAddress, paramString, ConnectType.Tcp);
                var           recHead       = receivePacket.Head;

                int         errorCode = LanguageHelper.GetLang().ErrorCode;
                string      errorMsg  = LanguageHelper.GetLang().RequestTimeout;
                MessageHead head      = new MessageHead(recHead.MsgId, recHead.ActionId, "st", errorCode, errorMsg);
                head.HasGzip = true;
                MessageStructure ds = new MessageStructure();
                ds.WriteBuffer(head);
                byte[] data = ds.ReadBuffer();
                OnSendCompleted(clientAddress, data);
            }
            catch (Exception ex)
            {
                TraceLog.WriteError("Send to client {0} timeout error:{1}", clientAddress, ex);
            }
        }
Exemplo n.º 2
0
 private static void OnNetHttpCallback(object sender, RemoteEventArgs e)
 {
     try
     {
         RemoteService proxy = sender as RemoteService;
         if (proxy == null)
         {
             return;
         }
         using (var ms = new MessageStructure(e.Data))
         {
             var head = ms.ReadHeadGzip();
             if (head != null)
             {
                 var package = proxy.Find(head.MsgId);
                 if (package != null)
                 {
                     package.Message = ms.ReadBuffer();
                     proxy.Remove(head.MsgId);
                     package.OnCallback();
                 }
             }
         }
     }
     catch (Exception ex)
     {
         TraceLog.WriteError("OnNetHttpCallback error:{0}", ex);
     }
 }
Exemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="response"></param>
        /// <param name="actionID"></param>
        /// <param name="errorCode"></param>
        /// <param name="errorInfo"></param>
        public static void RequestError(IGameResponse response, int actionID, int errorCode, string errorInfo)
        {
            MessageHead      head = new MessageHead(actionID, errorCode, errorInfo);
            MessageStructure sb   = new MessageStructure();

            sb.WriteBuffer(head);
            response.BinaryWrite(sb.ReadBuffer());
        }
Exemplo n.º 4
0
 protected byte[] OnCallRemoteComplated(ChannelContext context, string route, string param, string remoteAddress)
 {
     lock (context)
     {
         HttpGet          httpGet   = new HttpGet(param, remoteAddress);
         MessageStructure structure = new MessageStructure();
         MessageHead      head      = new MessageHead();
         OnCallRemote(route, httpGet, head, structure);
         structure.WriteBuffer(head);
         return(structure.ReadBuffer());
     }
 }
Exemplo n.º 5
0
        private void DoWriteError(string errorInfo)
        {
            var head = new MessageHead
            {
                ErrorCode = (int)MessageError.SystemError,
                Action    = ActionId
            };

            if (EnableError)
            {
                head.ErrorInfo = errorInfo;
            }
            _buffer.WriteBuffer(head);
            WriteBuffer(_buffer.ReadBuffer());
        }
Exemplo n.º 6
0
        protected virtual void OnSendToClient(PacketMessage packet)
        {
            var clientAddress = packet.Head.Address;

            byte[] content = packet.Content;
            if (!packet.Head.EnableGzip)
            {
                //gzip压缩包
                MessageStructure ds = new MessageStructure();
                ds.WriteGzipBuffer(content);
                packet.Content = ds.ReadBuffer();
            }
            byte[] data = packet.Content;
            OnSendCompleted(clientAddress, data);
        }
Exemplo n.º 7
0
        public void RequestTimeout(HttpConnection connection)
        {
            var    param     = connection.Param;
            int    msgId     = param.Get("MsgId").ToInt();
            int    actionId  = param.Get("ActionId").ToInt();
            int    errorCode = LanguageHelper.GetLang().ErrorCode;
            string errorMsg  = LanguageHelper.GetLang().RequestTimeout;
            var    head      = new MessageHead(msgId, actionId, "st", errorCode, errorMsg);

            head.HasGzip = true;
            var ms = new MessageStructure();

            ms.WriteBuffer(head);
            byte[] data = ms.ReadBuffer();

            string remoteAddress = connection.Context.Request.RemoteEndPoint.Address.ToString();
            string successMsg    = string.Format("{0}>>发送超时到{1} {2}字节!",
                                                 DateTime.Now.ToString("HH:mm:ss:ms"), remoteAddress, data.Length);

            Console.WriteLine(successMsg);
            OnResponseCompleted(connection, data);
        }
Exemplo n.º 8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="session"></param>
        /// <param name="buffer"></param>
        /// <returns></returns>
        public byte[] Receive(string session, byte[] buffer)
        {
            Stopwatch watch = new Stopwatch();

            watch.Start();
            BufferReader reader      = new BufferReader(buffer);
            string       routeName   = "";
            string       paramString = reader.ReadPacketString();

#if DEBUG
            //todo trace
            TraceLog.ReleaseWrite("Tcp param:{0}", paramString);
#endif
            bool isRoute = false;
            if (!string.IsNullOrEmpty(paramString) && paramString.StartsWith("route:", StringComparison.CurrentCultureIgnoreCase))
            {
                //检查参数格式:route:name?d=param
                isRoute = true;
                string[] paramArray = paramString.Split('?');
                if (paramArray.Length == 2)
                {
                    routeName   = paramArray[0].Replace("route:", "");
                    paramString = "?" + paramArray[1];
                }
            }
            paramString = HttpUtility.UrlDecode(paramString, Encoding.UTF8);
            int index = paramString.IndexOf("?d=");
            if (index != -1)
            {
                index      += 3;
                paramString = paramString.Substring(index, paramString.Length - index);
            }
            var         paramGeter    = new ParamGeter(paramString);
            string      remoteAddress = session.RemoteAddress;
            MessageHead head          = ParseMessageHead(paramGeter);
            head.HasGzip     = true;
            session.UserData = head;
            MessageStructure ms = new MessageStructure();
#if DEBUG
            Console.WriteLine("{0}>>请求参数:MsgId:{1},ActionId:{2},ip:{3}", DateTime.Now.ToLongTimeString(),
                              head.MsgId, head.Action, remoteAddress);
#endif
            var settings = ParseRequestSettings(paramGeter, remoteAddress);
            settings.ParamString = paramString;
            settings.RouteName   = routeName;

            byte[]       sendBuffer = new byte[0];
            RequestError error      = RequestError.Success;
            try
            {
                if (isRoute)
                {
                    if (CheckCallAccessLimit(remoteAddress))
                    {
                        error          = RequestError.Unknown;
                        head.ErrorInfo = ErrorCallAccessLimit;
                    }
                    else
                    {
                        ServiceRequest.CallRemote(settings, out sendBuffer);
                    }
                }
                else
                {
                    ServiceRequest.Request(settings, out sendBuffer);
                }
            }
            catch (CommunicationObjectFaultedException fault)
            {
                TraceLog.WriteError("The wcfclient request faulted:{0}", fault);
                error = RequestError.Closed;
                ServiceRequest.ResetChannel(settings);
            }
            catch (Exception ex)
            {
                if (ex.InnerException is SocketException)
                {
                    var sex = ex.InnerException as SocketException;
                    TraceLog.WriteError("The wcfclient request connect:{0}-{1}", sex.SocketErrorCode, sex);
                    if (sex.SocketErrorCode == SocketError.TimedOut)
                    {
                        error = RequestError.Timeout;
                    }
                    else
                    {
                        error = RequestError.UnableConnect;
                    }
                }
                else
                {
                    TraceLog.WriteError("The wcfclient request error:{0}", ex);
                    error = RequestError.Unknown;
                }
                ServiceRequest.ResetChannel(settings);
            }
            watch.Stop();
            switch (error)
            {
            case RequestError.Success:
                ms.WriteGzipBuffer(sendBuffer);

                string msg = string.Format("[{0}]请求响应{1}:route={8},MsgId={2},St={3},Action-{4},error:{5}-{6},bytes:{7},响应时间:{9}ms\r\n",
                                           DateTime.Now.ToLongTimeString(),
                                           session.RemoteAddress,
                                           head.MsgId,
                                           head.St,
                                           head.Action,
                                           head.ErrorCode,
                                           head.ErrorInfo,
                                           sendBuffer.Length,
                                           routeName,
                                           (int)watch.Elapsed.TotalMilliseconds);
                TraceLog.ReleaseWrite(msg);
#if DEBUG
#endif
                Console.WriteLine(msg);

                break;

            case RequestError.Closed:
            case RequestError.NotFindService:
                head.ErrorInfo = ErrorNotFind;
                DoWriteError(ms, head);
                break;

            case RequestError.UnableConnect:
                head.ErrorInfo = ErrorConnected;
                DoWriteError(ms, head);
                break;

            case RequestError.Timeout:
                head.ErrorInfo = ErrorTimeout;
                DoWriteError(ms, head);
                break;

            case RequestError.Unknown:
                DoWriteError(ms, head);
                break;

            default:
                throw new ArgumentOutOfRangeException("RequestError", error, "Not process RequestError enum.");
            }
            sendBuffer = ms.ReadBuffer();
            return(sendBuffer);
        }