Exemple #1
0
        public void EndRequest(ushort requestID, int appStatus,
                               ProtocolStatus protocolStatus)
        {
            var body = new EndRequestBody(appStatus, protocolStatus);

            try {
                if (IsConnected)
                {
                    byte[] bodyData = body.GetData();
                    send_buffers.EnforceBodyLength(bodyData.Length);
                    Array.Copy(bodyData, 0, send_buffers.Body.Value.Array, send_buffers.Body.Value.Offset, bodyData.Length);
                    var record = new Record(1, RecordType.EndRequest, requestID, send_buffers, bodyData.Length);
                    record.Send(socket);
                }
            } catch (System.Net.Sockets.SocketException) {
            }

            RemoveRequest(requestID);

            lock (connection_teardown_lock) {
                if (requests.Count == 0 && (!keep_alive || stop))
                {
                    CloseSocket();

                    if (!stop)
                    {
                        server.EndConnection(this);
                    }

                    receive_buffers.Return();
                    send_buffers.Return();
                }
            }
        }
Exemple #2
0
 public void SendRecord(RecordType type, ushort requestID,
                        byte [] bodyData, int bodyIndex,
                        int bodyLength)
 {
     if (IsConnected)
     {
         lock (send_lock) {
             try {
                 send_buffers.EnforceBodyLength(bodyLength);
                 Array.Copy(bodyData, bodyIndex, send_buffers.Body.Value.Array, send_buffers.Body.Value.Offset, bodyLength);
                 var record = new Record(1, type, requestID, send_buffers, bodyLength);
                 record.Send(socket);
             } catch (System.Net.Sockets.SocketException) {
             }
         }
     }
 }