PolyClient.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * PolyClient.cpp
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 3/6/09.
  6. * Copyright 2009 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyClient.h"
  10. using namespace Polycode;
  11. Client::Client(unsigned int port, int rate) : Peer(port) {
  12. rateTimer = new Timer(true, 1000/rate);
  13. rateTimer->addEventListener(this, Timer::EVENT_TRIGGER);
  14. connected = false;
  15. DummyData *dummy = new DummyData;
  16. dummy->dummy = 30;
  17. clientID = -1;
  18. setPersistentData((void*)dummy, sizeof(DummyData));
  19. }
  20. Client::~Client() {
  21. }
  22. void Client::handleEvent(Event *event) {
  23. if(connected) {
  24. if(event->getDispatcher() == rateTimer) {
  25. sendData(serverAddress, (char*)data, dataSize, PACKET_TYPE_CLIENT_DATA);
  26. }
  27. }
  28. Peer::handleEvent(event);
  29. }
  30. unsigned int Client::getClientID() {
  31. return clientID;
  32. }
  33. void Client::sendReliableDataToServer(char *data, unsigned int size, unsigned short type) {
  34. sendReliableData(serverAddress, data, size, type);
  35. }
  36. void Client::handlePacket(Packet *packet, PeerConnection *connection) {
  37. if(connection->address == serverAddress) {
  38. switch(packet->header.type) {
  39. case PACKET_TYPE_SETCLIENT_ID: {
  40. clientID = (unsigned short)*packet->data;
  41. ClientEvent *newEvent = new ClientEvent();
  42. dispatchEvent(newEvent, ClientEvent::EVENT_CLIENT_READY);
  43. sendReliableData(serverAddress, (char*)&clientID, sizeof(unsigned short), PACKET_TYPE_CLIENT_READY);
  44. } break;
  45. default: {
  46. ClientEvent *newEvent = new ClientEvent();
  47. newEvent->dataSize = packet->header.size;
  48. newEvent->dataType = packet->header.type;
  49. memcpy(newEvent->data, packet->data, newEvent->dataSize);
  50. dispatchEvent(newEvent, ClientEvent::EVENT_SERVER_DATA);
  51. }
  52. break;
  53. }
  54. }
  55. }
  56. void Client::setPersistentData(void *data, unsigned int size) {
  57. this->data = data;
  58. dataSize = size;
  59. }
  60. void Client::connect(string ipAddress, unsigned int port) {
  61. serverAddress.setAddress(ipAddress, port);
  62. connected = true;
  63. }
  64. void Client::updatePeer() {
  65. }