/// <summary> /// Method creates the web request and sends it immediately. /// Relies upon the requestState PacketId and MessageList being /// set appropriately. /// </summary> /// <param name="requestState">Request state.</param> private void InternalSendMessage(RequestState requestState) { // bundle up the data into a string Dictionary<string, object> packet = new Dictionary<string, object>(); packet[OperationParam.ServiceMessagePacketId.Value] = requestState.PacketId; packet[OperationParam.ServiceMessageSessionId.Value] = m_sessionID; packet[OperationParam.ServiceMessageMessages.Value] = requestState.MessageList; string jsonRequestString = JsonWriter.Serialize(packet); string sig = CalculateMD5Hash(jsonRequestString + m_secretKey); byte[] byteArray = Encoding.UTF8.GetBytes(jsonRequestString); requestState.Signature = sig; requestState.ByteArray = byteArray; if (m_debugPacketLossRate > 0.0) { System.Random r = new System.Random(); requestState.LoseThisPacket = r.NextDouble () > m_debugPacketLossRate; } if (!requestState.LoseThisPacket) { #if !(DOT_NET) Dictionary<string, string> formTable = new Dictionary<string, string>(); formTable["Content-Type"] = "application/json; charset=utf-8"; formTable["X-SIG"] = sig; WWW request = new WWW(m_serverURL, byteArray, formTable); #else WebRequest request = WebRequest.Create(m_serverURL); request.ContentType = "application/json; charset=utf-8"; request.Method = "POST"; request.Headers.Add("X-SIG", sig); request.ContentLength = byteArray.Length; request.Timeout = (int) GetPacketTimeout(requestState).TotalMilliseconds; // TODO: Convert to using a task as BeginGetRequestStream can block for minutes requestState.AsyncResult = request.BeginGetRequestStream(new AsyncCallback(GetRequestCallback), requestState); #endif requestState.WebRequest = request; } requestState.RequestString = jsonRequestString; requestState.TimeSent = DateTime.Now; ResetIdleTimer(); m_brainCloudClientRef.Log("OUTGOING " + (requestState.Retries > 0 ? " Retry(" + requestState.Retries +"): " : ": ") + jsonRequestString); }