From 1545914afff13e37bfcfee1b04828942e430a819 Mon Sep 17 00:00:00 2001 From: Jeffrey Armstrong Date: Thu, 25 Mar 2021 10:11:12 -0400 Subject: Added endpoints and convenience functions for talking to the server. Completed task loop and run loop. --- player/talking.f90 | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 player/talking.f90 (limited to 'player/talking.f90') 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 -- cgit v1.2.3