aboutsummaryrefslogtreecommitdiff
path: root/player/talking.f90
diff options
context:
space:
mode:
authorJeffrey Armstrong <jeff@approximatrix.com>2021-03-25 10:11:12 -0400
committerJeffrey Armstrong <jeff@approximatrix.com>2021-03-25 10:11:12 -0400
commit1545914afff13e37bfcfee1b04828942e430a819 (patch)
treece9cb948e4fceb68fb63119864d55b342f6a04f7 /player/talking.f90
parent87aae7769be9e49111e449f2ee2d1775aee63539 (diff)
downloadlevitating-1545914afff13e37bfcfee1b04828942e430a819.tar.gz
levitating-1545914afff13e37bfcfee1b04828942e430a819.zip
Added endpoints and convenience functions for talking to the server. Completed task loop and run loop.
Diffstat (limited to 'player/talking.f90')
-rw-r--r--player/talking.f90115
1 files changed, 115 insertions, 0 deletions
diff --git a/player/talking.f90 b/player/talking.f90
new file mode 100644
index 0000000..f41d3bb
--- /dev/null
+++ b/player/talking.f90
@@ -0,0 +1,115 @@
+module talking
+implicit none
+
+contains
+
+ function request_to_file(url, filename) result(status_code)
+ use utilities
+ use gemini_protocol
+ implicit none
+
+ character(*), intent(in)::url
+ character(*), intent(in)::filename
+
+ character(64)::return_type
+
+ integer::unit_number
+ integer::status_code
+ integer::istatus
+
+ character(len=:), allocatable::mod_url
+
+ allocate(character(len=len_trim(url)) :: mod_url)
+ mod_url = url
+
+ open(newunit=unit_number, file=filename, status='UNKNOWN', &
+ access='STREAM', form='UNFORMATTED', iostat=istatus)
+
+ if(istatus == 0) then
+ status_code = request_url(mod_url, unit_number, return_type)
+ else
+ status_code = STATUS_LOCALFAIL
+ end if
+
+ close(unit_number)
+
+ deallocate(mod_url)
+
+ end function request_to_file
+
+ function request_to_temporary_file(url, filename) result(status_code)
+ use utilities, only: generate_temporary_filename
+ use gemini_protocol, only: STATUS_LOCALFAIL
+ implicit none
+
+ character(*), intent(in)::url
+ character(:), pointer::filename
+ integer::status_code
+
+ filename = generate_temporary_filename()
+ if(.not. associated(filename)) then
+ status_code = STATUS_LOCALFAIL
+ else
+ status_code = request_to_file(url, filename)
+ end if
+
+ end function request_to_temporary_file
+
+ function request_to_ignored(url) result(status_code)
+ use gemini_protocol
+ implicit none
+
+ character(*), intent(in)::url
+ integer::status_code
+ integer::io
+ character(64)::return_type
+
+ character(len=:), allocatable::mod_url
+
+ allocate(character(len=len_trim(url)) :: mod_url)
+ mod_url = url
+
+ open(newunit=io, form="formatted", status="scratch", access='stream')
+ status_code = request_url(mod_url, io, return_type)
+ close(io)
+
+ deallocate(mod_url)
+
+ end function request_to_ignored
+
+ function send_file(url, filename) result(status_code)
+ use gemini_protocol
+ use config, only: token
+ implicit none
+
+ character(*), intent(in)::url
+ character(*), intent(in)::filename
+ integer::status_code
+ integer::io
+
+ character(64)::return_type
+ character(len=:), allocatable::mod_url
+
+ integer(kind=8)::file_size
+ integer::unit_number, istatus
+
+ allocate(character(len=len_trim(url)) :: mod_url)
+ mod_url = url
+
+ inquire(file=filename, size=file_size)
+
+ open(newunit=unit_number, file=trim(filename), status='UNKNOWN', &
+ access='STREAM', form='UNFORMATTED', iostat=istatus)
+
+ if(istatus == 0) then
+ status_code = titan_post_url(mod_url, unit_number, file_size, token)
+ close(unit_number)
+ else
+ status_code = STATUS_LOCALFAIL
+ end if
+
+ deallocate(mod_url)
+
+ end function send_file
+
+end module talking \ No newline at end of file