Beispiel #1
0
        public void SendGameRequest(Msg.Code code, long uid, object o = null, object ctx = null)
        {
            queue.Enqueue(() => {
                Stream dataStreamSend = null;
                WebResponse response  = null;
                StreamReader reader   = null;
                Stream dataStreamRecv = null;
                try
                {
                    var url = gameServerURL + "?uid=" + uid + "&code=" + (int)code;

                    HttpWebRequest request   = (HttpWebRequest)HttpWebRequest.Create(url);
                    request.Method           = "POST";
                    request.Timeout          = 3 * 1000;
                    request.ReadWriteTimeout = 3 * 1000;

                    byte[] byteArray = new byte[] { };
                    if (o != null)
                    {
                        byteArray = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(o));
                    }
                    request.ContentLength = byteArray.Length;
                    dataStreamSend        = request.GetRequestStream();
                    dataStreamSend.Write(byteArray, 0, byteArray.Length);
                    dataStreamSend.Close();
                    response                  = request.GetResponse();
                    dataStreamRecv            = response.GetResponseStream();
                    reader                    = new StreamReader(dataStreamRecv);
                    string responseFromServer = reader.ReadToEnd();
                    callback.OnResponse(code, responseFromServer, ctx);
                }
                catch (WebException ex)
                {
                    using (HttpWebResponse res = (HttpWebResponse)ex.Response)
                    {
                        switch (res.StatusCode)
                        {
                        case HttpStatusCode.BadRequest:
                        case HttpStatusCode.InternalServerError:
                            var errRet = Msg.MakeErrorResponse(code, uid, (int)Msg.Err.ErrSendFailure, res.ToString());

                            if (errRet == null)
                            {
                                callback.OnError(ex);
                            }
                            else
                            {
                                callback.OnResponse(code, errRet, ctx);
                            }

                            break;

                        default:
                            callback.OnError(ex);
                            break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    // shit happen ... 待处理
                    callback.OnError(ex);
                }
                finally
                {
                    if (dataStreamSend != null)
                    {
                        dataStreamSend.Close();
                    }
                    if (response != null)
                    {
                        response.Close();
                    }
                    if (reader != null)
                    {
                        reader.Close();
                    }
                    if (dataStreamRecv != null)
                    {
                        dataStreamRecv.Close();
                    }
                }
            });
        }