OSDN Git Service

[General][VM][FM7][CMake] Build at least eFM77AV40EX.
[csp-qt/common_source_project-fm7.git] / source / src / qt / osd_socket.cpp
1 /*
2         Skelton for retropc emulator
3
4         Author : Takeda.Toshiya
5         Date   : 2015.11.26-
6
7         [ win32 socket ]
8 */
9
10 #include "../emu.h"
11
12 #ifdef USE_SOCKET
13 void OSD::initialize_socket()
14 {
15         for(int i = 0; i < SOCKET_MAX; i++) {
16                 soc[i] = -1;
17                 socket_delay[i] = 0;
18                 recv_r_ptr[i] = recv_w_ptr[i] = 0;
19         }
20 }
21
22 void OSD::release_socket()
23 {
24         // release sockets
25
26         // release winsock
27 }
28
29 void OSD::notify_socket_connected(int ch)
30 {
31         // winmain notify that network is connected
32         vm->notify_socket_connected(ch);
33 }
34
35 void OSD::notify_socket_disconnected(int ch)
36 {
37         // winmain notify that network is disconnected
38         if(!socket_delay[ch]) {
39                 socket_delay[ch] = 1;//56;
40         }
41 }
42
43 void OSD::update_socket()
44 {
45         for(int i = 0; i < SOCKET_MAX; i++) {
46                 if(recv_r_ptr[i] < recv_w_ptr[i]) {
47                         // get buffer
48                         int size0, size1;
49                         uint8* buf0 = vm->get_socket_recv_buffer0(i, &size0, &size1);
50                         uint8* buf1 = vm->get_socket_recv_buffer1(i);
51                         
52                         int size = recv_w_ptr[i] - recv_r_ptr[i];
53                         if(size > size0 + size1) {
54                                 size = size0 + size1;
55                         }
56                         char* src = &recv_buffer[i][recv_r_ptr[i]];
57                         recv_r_ptr[i] += size;
58                         
59                         if(size <= size0) {
60                                 memcpy(buf0, src, size);
61                         } else {
62                                 memcpy(buf0, src, size0);
63                                 memcpy(buf1, src + size0, size - size0);
64                         }
65                         vm->inc_socket_recv_buffer_ptr(i, size);
66                 } else if(socket_delay[i] != 0) {
67                         if(--socket_delay[i] == 0) {
68                                 vm->notify_socket_disconnected(i);
69                         }
70                 }
71         }
72 }
73
74 bool OSD::initialize_socket_tcp(int ch)
75 {
76         is_tcp[ch] = true;
77         soc[ch] = -1;
78         recv_r_ptr[ch] = recv_w_ptr[ch] = 0;
79         return false;
80         //return true;
81 }
82
83 bool OSD::initialize_socket_udp(int ch)
84 {
85         is_tcp[ch] = false;
86         soc[ch] = -1;
87         recv_r_ptr[ch] = recv_w_ptr[ch] = 0;
88         return false;
89 }
90
91 bool OSD::connect_socket(int ch, uint32 ipaddr, int port)
92 {
93         return true;
94 }
95
96 void OSD::disconnect_socket(int ch)
97 {
98         soc[ch] = -1;
99         vm->notify_socket_disconnected(ch);
100 }
101
102 bool OSD::listen_socket(int ch)
103 {
104         return false;
105 }
106
107 void OSD::send_socket_data_tcp(int ch)
108 {
109 }
110
111 void OSD::send_socket_data_udp(int ch, uint32 ipaddr, int port)
112 {
113 }
114
115 void OSD::send_socket_data(int ch)
116 {
117 }
118
119 void OSD::recv_socket_data(int ch)
120 {
121 }
122 #endif