PageRenderTime 44ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/examples/sendto_test.sp

https://gitlab.com/N3X15/sm-ext-socket
Unknown | 116 lines | 90 code | 26 blank | 0 comment | 0 complexity | 45e08acf0c1f9be614017ef55be25b9f MD5 | raw file
Possible License(s): GPL-2.0
  1. /**
  2. * Socket extension sendto selftest
  3. */
  4. #include <sourcemod>
  5. #include <socket>
  6. public Plugin:myinfo = {
  7. name = "socket extension sendto selftest",
  8. author = "Player",
  9. description = "basic functionality testing",
  10. version = "1.0.0",
  11. url = "http://www.player.to/"
  12. };
  13. public OnPluginStart() {
  14. SocketSetOption(INVALID_HANDLE, DebugMode, 1);
  15. new port = 12346;
  16. new Handle:socket = SocketCreate(SOCKET_UDP, OnLSocketError);
  17. SocketBind(socket, "0.0.0.0", port);
  18. SocketListen(socket, OnLSocketIncoming);
  19. new Handle:socket2 = SocketCreate(SOCKET_UDP, OnCSocketError);
  20. //SocketConnect(socket2, OnCSocketConnect, OnCSocketReceive, OnCSocketDisconnect, "127.0.0.1", port);
  21. }
  22. public OnLSocketIncoming(Handle:socket, Handle:newSocket, String:remoteIP[], remotePort, any:arg) {
  23. PrintToServer("%s:%d connected", remoteIP, remotePort);
  24. SocketSetReceiveCallback(newSocket, OnChildSocketReceive);
  25. SocketSetDisconnectCallback(newSocket, OnChildSocketDisconnect);
  26. SocketSetErrorCallback(newSocket, OnChildSocketError);
  27. SocketSend(newSocket, "\x00abc\x00def\x01\x02\x03\x04", 12);
  28. SocketSetSendqueueEmptyCallback(newSocket, OnChildSocketSQEmpty);
  29. }
  30. public OnLSocketError(Handle:socket, const errorType, const errorNum, any:arg) {
  31. LogError("listen socket error %d (errno %d)", errorType, errorNum);
  32. CloseHandle(socket);
  33. }
  34. public OnChildSocketReceive(Handle:socket, String:receiveData[], const dataSize, any:arg) {
  35. // send (echo) the received data back
  36. //SocketSend(socket, receiveData);
  37. // close the connection/socket/handle if it matches quit
  38. //if (strncmp(receiveData, "quit", 4) == 0) CloseHandle(socket);
  39. }
  40. public OnChildSocketSQEmpty(Handle:socket, any:arg) {
  41. PrintToServer("sq empty");
  42. CloseHandle(socket);
  43. }
  44. public OnChildSocketDisconnect(Handle:socket, any:arg) {
  45. // remote side disconnected
  46. PrintToServer("disc");
  47. CloseHandle(socket);
  48. }
  49. public OnChildSocketError(Handle:socket, const errorType, const errorNum, any:arg) {
  50. // a socket error occured
  51. LogError("child socket error %d (errno %d)", errorType, errorNum);
  52. CloseHandle(socket);
  53. }
  54. public OnCSocketConnect(Handle:socket, any:arg) {
  55. // send (echo) the received data back
  56. //SocketSend(socket, receiveData);
  57. // close the connection/socket/handle if it matches quit
  58. //if (strncmp(receiveData, "quit", 4) == 0) CloseHandle(socket);
  59. }
  60. new String:recvBuffer[128];
  61. new recvBufferPos = 0;
  62. public OnCSocketReceive(Handle:socket, String:receiveData[], const dataSize, any:arg) {
  63. PrintToServer("received %d bytes", dataSize);
  64. if (recvBufferPos < 512) {
  65. for (new i=0; i<dataSize && recvBufferPos<sizeof(recvBuffer); i++, recvBufferPos++) {
  66. recvBuffer[recvBufferPos] = receiveData[i];
  67. }
  68. }
  69. // send (echo) the received data back
  70. //SocketSend(socket, receiveData);
  71. // close the connection/socket/handle if it matches quit
  72. //if (strncmp(receiveData, "quit", 4) == 0) CloseHandle(socket);
  73. }
  74. public OnCSocketDisconnect(Handle:socket, any:arg) {
  75. new String:cmp[] = "\x00abc\x00def\x01\x02\x03\x04";
  76. new i;
  77. for (i=0; i<recvBufferPos && i<12; i++) {
  78. if (recvBuffer[i] != cmp[i]) {
  79. PrintToServer("comparison failed");
  80. break;
  81. }
  82. }
  83. PrintToServer("comparison finished at pos %d/%d", i, recvBufferPos);
  84. CloseHandle(socket);
  85. }
  86. public OnCSocketError(Handle:socket, const errorType, const errorNum, any:arg) {
  87. // a socket error occured
  88. LogError("connect socket error %d (errno %d)", errorType, errorNum);
  89. CloseHandle(socket);
  90. }