[service-vm] Send shutdown request to exit rialto

And rialto will be in a loop of processing request till receiving
the shutdown request.

Bug: 299432766
Test: atest rialto_test
Change-Id: Ifd65adde74a370a91fc462930bb513a3e1fe65b9
diff --git a/rialto/src/communication.rs b/rialto/src/communication.rs
index ee4ecdb..50722f2 100644
--- a/rialto/src/communication.rs
+++ b/rialto/src/communication.rs
@@ -20,7 +20,7 @@
 use core::mem;
 use core::result;
 use log::info;
-use service_vm_comm::{Request, Response};
+use service_vm_comm::{Response, ServiceVmRequest};
 use tinyvec::ArrayVec;
 use virtio_drivers::{
     self,
@@ -84,7 +84,7 @@
         }
     }
 
-    pub fn read_request(&mut self) -> Result<Request> {
+    pub fn read_request(&mut self) -> Result<ServiceVmRequest> {
         Ok(ciborium::from_reader(self)?)
     }
 
diff --git a/rialto/src/main.rs b/rialto/src/main.rs
index d777b2d..4e91574 100644
--- a/rialto/src/main.rs
+++ b/rialto/src/main.rs
@@ -33,7 +33,7 @@
 use hyp::{get_mem_sharer, get_mmio_guard};
 use libfdt::FdtError;
 use log::{debug, error, info};
-use service_vm_comm::VmType;
+use service_vm_comm::{ServiceVmRequest, VmType};
 use virtio_drivers::{
     device::socket::{VsockAddr, VMADDR_CID_HOST},
     transport::{pci::bus::PciRoot, DeviceType, Transport},
@@ -140,9 +140,11 @@
     debug!("Found socket device: guest cid = {:?}", socket_device.guest_cid());
 
     let mut vsock_stream = VsockStream::new(socket_device, host_addr())?;
-    let response = requests::process_request(vsock_stream.read_request()?)?;
-    vsock_stream.write_response(&response)?;
-    vsock_stream.flush()?;
+    while let ServiceVmRequest::Process(req) = vsock_stream.read_request()? {
+        let response = requests::process_request(req)?;
+        vsock_stream.write_response(&response)?;
+        vsock_stream.flush()?;
+    }
     vsock_stream.shutdown()?;
 
     Ok(())
diff --git a/rialto/tests/test.rs b/rialto/tests/test.rs
index 20d00b5..fc6e20a 100644
--- a/rialto/tests/test.rs
+++ b/rialto/tests/test.rs
@@ -55,8 +55,8 @@
     let message = "abc".repeat(166);
     let request = Request::Reverse(message.as_bytes().to_vec());
 
-    let response = vm.process_request(&request)?;
-    info!("Received response '{response:?}' for the request '{request:?}'.");
+    let response = vm.process_request(request)?;
+    info!("Received response: {response:?}.");
 
     let expected_response: Vec<u8> = message.as_bytes().iter().rev().cloned().collect();
     assert_eq!(Response::Reverse(expected_response), response);