Code for sending the keyframes over to the demo

This commit is contained in:
Daniel Collin 2012-10-27 10:11:41 +02:00
parent 5faf9d53fd
commit d681e5bd20
3 changed files with 85 additions and 24 deletions

View File

@ -10,6 +10,7 @@
#include "RemoteConnection.h" #include "RemoteConnection.h"
#include "../../sync/sync.h" #include "../../sync/sync.h"
#include "../../sync/base.h" #include "../../sync/base.h"
#include "../../sync/data.h"
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -23,8 +24,21 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct EditorData
{
struct sync_data syncData;
TrackViewInfo trackViewInfo;
int trackOrder[8192];
int orderCount;
} EditorData;
static EditorData s_editorData;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static uint64_t fontIds[2]; static uint64_t fontIds[2];
static TrackViewInfo s_trackViewInfo; int clientIndex = 0;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -34,7 +48,7 @@ void Editor_create()
//fontIds[0] = Emgui_loadFont("/Users/daniel/Library/Fonts/MicroKnight_v1.0.ttf", 11.0f); //fontIds[0] = Emgui_loadFont("/Users/daniel/Library/Fonts/MicroKnight_v1.0.ttf", 11.0f);
fontIds[0] = Emgui_loadFont(FONT_PATH "Arial.ttf", 11.0f); fontIds[0] = Emgui_loadFont(FONT_PATH "Arial.ttf", 11.0f);
memset(&s_trackViewInfo, 0, sizeof(s_trackViewInfo)); memset(&s_editorData, 0, sizeof(s_editorData));
RemoteConnection_createListner(); RemoteConnection_createListner();
} }
@ -51,7 +65,7 @@ void Editor_update()
{ {
Emgui_begin(); Emgui_begin();
TrackView_render(&s_trackViewInfo); TrackView_render(&s_editorData.trackViewInfo);
Emgui_end(); Emgui_end();
} }
@ -81,11 +95,20 @@ bool Editor_keyDown(int key)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static int createTrack(EditorData* data, const char* name)
{
int index = sync_create_track(&data->syncData, name);
data->trackOrder[data->orderCount] = index;
data->orderCount++;
return index;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void processCommands() static void processCommands()
{ {
//SyncDocument *doc = trackView->getDocument(); //SyncDocument *doc = trackView->getDocument();
int strLen, newRow; int strLen, newRow, serverIndex;
//const struct sync_track* t;
unsigned char cmd = 0; unsigned char cmd = 0;
if (RemoteConnection_recv((char*)&cmd, 1, 0)) if (RemoteConnection_recv((char*)&cmd, 1, 0))
@ -110,21 +133,20 @@ static void processCommands()
rlog(R_INFO, "Got trackname %s (%d) from demo\n", trackName, strLen); rlog(R_INFO, "Got trackname %s (%d) from demo\n", trackName, strLen);
// find track // find track
/*
serverIndex = sync_find_track(doc, trackName.c_str()); serverIndex = sync_find_track(&s_editorData.syncData, trackName);
if (0 > serverIndex) if (0 > serverIndex)
serverIndex = int(doc->createTrack(trackName)); serverIndex = createTrack(&s_editorData, trackName);
// setup remap // setup remap and send the keyframes to the demo
doc->clientSocket.clientTracks[trackName] = clientIndex++; RemoteConnection_mapTrackName(trackName, clientIndex++);
RemoteConnection_sendKeyFrames(trackName, s_editorData.syncData.tracks[serverIndex]);
// send key-frames // send key-frames
t = doc->tracks[serverIndex]; //t = doc->tracks[serverIndex];
for (int i = 0; i < (int)t->num_keys; ++i) //for (i = 0; i < (int)t->num_keys; ++i)
doc->clientSocket.sendSetKeyCommand(trackName, t->keys[i]); // doc->clientSocket.sendSetKeyCommand(trackName, t->keys[i]);
InvalidateRect(trackViewWin, NULL, FALSE);
*/
break; break;
} }

View File

@ -34,6 +34,7 @@
#define SOCKET_ERROR -1 #define SOCKET_ERROR -1
#endif #endif
extern int clientIndex;
int s_socket = INVALID_SOCKET; int s_socket = INVALID_SOCKET;
int s_serverSocket = INVALID_SOCKET; int s_serverSocket = INVALID_SOCKET;
static bool s_paused = false; static bool s_paused = false;
@ -93,6 +94,20 @@ int findTrack(const char* name)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void RemoteConnection_mapTrackName(const char* name, int index)
{
int count = s_nameLookup.count;
if (findTrack(name))
return;
s_nameLookup.hashes[count] = quickHash(name);
s_nameLookup.ids[count] = index;
s_nameLookup.count++;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static bool setBlocking(int sock, bool blocking) static bool setBlocking(int sock, bool blocking)
{ {
u_long block = blocking ? 0 : 1; u_long block = blocking ? 0 : 1;
@ -205,10 +220,9 @@ void RemoteConnection_updateListner()
{ {
rlog(R_INFO, "Connected to %s\n", inet_ntoa(client.sin_addr)); rlog(R_INFO, "Connected to %s\n", inet_ntoa(client.sin_addr));
s_socket = clientSocket; s_socket = clientSocket;
clientIndex = 0;
RemoteConnection_sendPauseCommand(true); RemoteConnection_sendPauseCommand(true);
//RemoteConnection_sendSetRowCommand(trackView->getEditRow()); //RemoteConnection_sendSetRowCommand(trackView->getEditRow());
} }
else else
{ {
@ -280,7 +294,7 @@ bool RemoteConnection_pollRead()
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void RemoteConnection_sendSetKeyCommand(const char* trackName, const struct track_key* key) static void sendSetKeyCommandIndex(uint32_t index, const struct track_key* key)
{ {
uint32_t track, row; uint32_t track, row;
uint8_t cmd = SET_KEY; uint8_t cmd = SET_KEY;
@ -291,12 +305,7 @@ void RemoteConnection_sendSetKeyCommand(const char* trackName, const struct trac
uint32_t i; uint32_t i;
} v; } v;
track_id = findTrack(trackName); track = htonl(track_id);
if (!RemoteConnection_connected() || track_id == -1)
return;
track = htonl((uint32_t)track_id);
row = htonl(key->row); row = htonl(key->row);
v.f = key->value; v.f = key->value;
@ -313,6 +322,18 @@ void RemoteConnection_sendSetKeyCommand(const char* trackName, const struct trac
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void RemoteConnection_sendSetKeyCommand(const char* trackName, const struct track_key* key)
{
int track_id = findTrack(trackName);
if (!RemoteConnection_connected() || track_id == -1)
return;
sendSetKeyCommandIndex((uint32_t)track_id, key);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void RemoteConnection_sendDeleteKeyCommand(const char* trackName, int row) void RemoteConnection_sendDeleteKeyCommand(const char* trackName, int row)
{ {
uint32_t track; uint32_t track;
@ -378,3 +399,16 @@ bool RemoteConnection_isPaused()
return s_paused; return s_paused;
} }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void RemoteConnection_sendKeyFrames(const char* name, struct sync_track* track)
{
int i, track_id = findTrack(name);
if (!RemoteConnection_connected() || track_id == -1)
return;
for (i = 0; i < (int)track->num_keys; ++i)
sendSetKeyCommandIndex((uint32_t)track_id, &track->keys[i]);
}

View File

@ -3,6 +3,7 @@
#include <Types.h> #include <Types.h>
struct track_key; struct track_key;
struct sync_track;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Listen for incoming connections // Listen for incoming connections
@ -19,9 +20,13 @@ void RemoteConnection_disconnect();
bool RemoteConnection_recv(char* buffer, size_t length, int flags); bool RemoteConnection_recv(char* buffer, size_t length, int flags);
bool RemoteConnection_send(const char* buffer, size_t length, int flags); bool RemoteConnection_send(const char* buffer, size_t length, int flags);
bool RemoteConnection_pollRead(); bool RemoteConnection_pollRead();
void RemoteConnection_sendSetKeyCommand(const char* trackName, const struct track_key* key); void RemoteConnection_sendSetKeyCommand(const char* trackName, const struct track_key* key);
void RemoteConnection_sendDeleteKeyCommand(const char* trackName, int row); void RemoteConnection_sendDeleteKeyCommand(const char* trackName, int row);
void RemoteConnection_sendSetRowCommand(int row); void RemoteConnection_sendSetRowCommand(int row);
void RemoteConnection_sendPauseCommand(bool pause); void RemoteConnection_sendPauseCommand(bool pause);
void RemoteConnection_sendSaveCommand(); void RemoteConnection_sendSaveCommand();
void RemoteConnection_sendKeyFrames(const char* name, struct sync_track* track);
void RemoteConnection_mapTrackName(const char* name, int index);