2014-07-06 20:40:33 -04:00
|
|
|
#pragma once
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "GameConnection.h"
|
|
|
|
#include "VirtualController.h"
|
|
|
|
|
|
|
|
class GameClientConnection : public GameConnection
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
vector<unique_ptr<VirtualController>> _virtualControllers;
|
|
|
|
IControlDevice* _controlDevice;
|
2014-07-07 21:23:03 -04:00
|
|
|
uint8_t _lastInputSent = 0x00;
|
2014-07-06 20:40:33 -04:00
|
|
|
|
|
|
|
private:
|
|
|
|
void SendHandshake()
|
|
|
|
{
|
|
|
|
SendNetMessage(HandShakeMessage());
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void ProcessMessage(NetMessage* message)
|
|
|
|
{
|
|
|
|
switch(message->Type) {
|
|
|
|
case MessageType::SaveState:
|
|
|
|
Console::Pause();
|
|
|
|
|
|
|
|
((SaveStateMessage*)message)->LoadState();
|
|
|
|
|
|
|
|
_virtualControllers.clear();
|
|
|
|
for(int i = 0; i < 4; i++) {
|
|
|
|
_virtualControllers.push_back(unique_ptr<VirtualController>(new VirtualController(i)));
|
|
|
|
}
|
|
|
|
|
|
|
|
Console::Resume();
|
|
|
|
break;
|
|
|
|
case MessageType::MovieData:
|
|
|
|
uint8_t port = ((MovieDataMessage*)message)->PortNumber;
|
|
|
|
uint8_t state = ((MovieDataMessage*)message)->InputState;
|
|
|
|
|
|
|
|
_virtualControllers[port]->PushState(state);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public:
|
|
|
|
GameClientConnection(shared_ptr<Socket> socket) : GameConnection(socket)
|
|
|
|
{
|
|
|
|
_controlDevice = ControlManager::GetControlDevice(0);
|
|
|
|
ControlManager::BackupControlDevices();
|
|
|
|
|
|
|
|
Console::DisplayMessage(L"Connected to server.");
|
|
|
|
|
|
|
|
SendHandshake();
|
|
|
|
}
|
|
|
|
|
|
|
|
~GameClientConnection()
|
|
|
|
{
|
2014-07-06 21:11:52 -04:00
|
|
|
_virtualControllers.clear();
|
2014-07-06 20:40:33 -04:00
|
|
|
ControlManager::RestoreControlDevices();
|
|
|
|
Console::DisplayMessage(L"Connection to server lost.");
|
|
|
|
}
|
|
|
|
|
|
|
|
void SendInput()
|
|
|
|
{
|
2014-07-07 21:23:03 -04:00
|
|
|
uint8_t inputState = _controlDevice->GetButtonState().ToByte();
|
|
|
|
if(_lastInputSent != inputState) {
|
|
|
|
SendNetMessage(InputDataMessage(inputState));
|
|
|
|
_lastInputSent = inputState;
|
|
|
|
}
|
2014-07-06 20:40:33 -04:00
|
|
|
}
|
|
|
|
};
|