equal
deleted
inserted
replaced
99 // Get the actual chat message as c string |
99 // Get the actual chat message as c string |
100 char chatMsg[256]; |
100 char chatMsg[256]; |
101 memcpy(chatMsg, message+2, message[0]-3); |
101 memcpy(chatMsg, message+2, message[0]-3); |
102 chatMsg[message[0]-3] = 0; |
102 chatMsg[message[0]-3] = 0; |
103 |
103 |
|
104 // If the message starts with /me, it will be displayed differently. |
104 char converted[257]; |
105 char converted[257]; |
105 bool memessage = message[0] >= 7 && !memcmp(message+2, "/me ", 4); |
106 bool memessage = message[0] >= 7 && !memcmp(message+2, "/me ", 4); |
106 const char *template = memessage ? "s\x02* %s %s " : "s\x01%s: %s "; |
107 const char *template = memessage ? "s\x02* %s %s " : "s\x01%s: %s "; |
107 int size = snprintf(converted+1, 256, template, ipc->playerName, chatMsg); |
108 int size = snprintf(converted+1, 256, template, ipc->playerName, chatMsg); |
108 converted[0] = size>255 ? 255 : size; |
109 converted[0] = size>255 ? 255 : size; |
111 } else { |
112 } else { |
112 demo_record(ipc, message, message[0]+1); |
113 demo_record(ipc, message, message[0]+1); |
113 } |
114 } |
114 } |
115 } |
115 |
116 |
116 /** |
|
117 * Receive a single message and copy it into the data buffer. |
|
118 * Returns the length of the received message, -1 when nothing is received. |
|
119 */ |
|
120 int flib_ipcconn_recv_message(flib_ipcconn ipc, void *data) { |
117 int flib_ipcconn_recv_message(flib_ipcconn ipc, void *data) { |
121 flib_ipcconn_tick(ipc); |
118 flib_ipcconn_tick(ipc); |
122 |
119 |
123 if(ipc->sock) { |
120 if(ipc->sock) { |
124 int size = flib_socket_nbrecv(ipc->sock, ipc->readBuffer+ipc->readBufferSize, sizeof(ipc->readBuffer)-ipc->readBufferSize); |
121 int size = flib_socket_nbrecv(ipc->sock, ipc->readBuffer+ipc->readBufferSize, sizeof(ipc->readBuffer)-ipc->readBufferSize); |
127 } else { |
124 } else { |
128 flib_socket_close(&ipc->sock); |
125 flib_socket_close(&ipc->sock); |
129 } |
126 } |
130 } |
127 } |
131 |
128 |
132 int msgsize = ipc->readBuffer[0]; |
129 int msgsize = ipc->readBuffer[0]+1; |
133 if(ipc->readBufferSize > msgsize) { |
130 if(ipc->readBufferSize >= msgsize) { |
134 demo_record_from_engine(ipc, ipc->readBuffer); |
131 demo_record_from_engine(ipc, ipc->readBuffer); |
135 memcpy(data, ipc->readBuffer+1, msgsize); |
132 memcpy(data, ipc->readBuffer, msgsize); |
136 memmove(ipc->readBuffer, ipc->readBuffer+msgsize+1, ipc->readBufferSize-(msgsize+1)); |
133 memmove(ipc->readBuffer, ipc->readBuffer+msgsize, ipc->readBufferSize-msgsize); |
137 ipc->readBufferSize -= (msgsize+1); |
134 ipc->readBufferSize -= msgsize; |
138 return msgsize; |
135 return msgsize; |
139 } else if(!ipc->sock && ipc->readBufferSize>0) { |
136 } else if(!ipc->sock && ipc->readBufferSize>0) { |
140 flib_log_w("Last message from engine data stream is incomplete (received %u of %u bytes)", ipc->readBufferSize-1, msgsize); |
137 flib_log_w("Last message from engine data stream is incomplete (received %u of %u bytes)", ipc->readBufferSize, msgsize); |
141 ipc->readBufferSize = 0; |
138 ipc->readBufferSize = 0; |
142 return -1; |
139 return -1; |
143 } else { |
140 } else { |
144 return -1; |
141 return -1; |
145 } |
142 } |