diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index 766efef..552516b 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -18,6 +18,14 @@ #include "../../lib/base.h" #include +enum { + SET_KEY = 0, + DELETE_KEY = 1, + GET_TRACK = 2, + SET_ROW = 3, + PAUSE = 4, + SAVE_TRACKS = 5 +}; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static void updateNeedsSaving(); @@ -139,7 +147,7 @@ void setMostRecentFile(const text_t* filename) static inline struct sync_track** getTracks() { - return s_editorData.trackData.syncData.tracks; + return s_editorData.trackData.syncTracks; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -174,7 +182,7 @@ static inline int getActiveTrack() static inline int getTrackCount() { - return s_editorData.trackData.syncData.num_tracks; + return s_editorData.trackData.num_syncTracks; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -864,7 +872,7 @@ static int processCommands() // setup remap and send the keyframes to the demo RemoteConnection_mapTrackName(trackName); - RemoteConnection_sendKeyFrames(trackName, s_editorData.trackData.syncData.tracks[serverIndex]); + RemoteConnection_sendKeyFrames(trackName, s_editorData.trackData.syncTracks[serverIndex]); TrackData_linkTrack(serverIndex, trackName, &s_editorData.trackData); s_editorData.trackData.tracks[serverIndex].active = true; diff --git a/ogl_editor/src/RemoteConnection.c b/ogl_editor/src/RemoteConnection.c index 44e8c3a..ded19a2 100644 --- a/ogl_editor/src/RemoteConnection.c +++ b/ogl_editor/src/RemoteConnection.c @@ -27,6 +27,8 @@ #include "rlog.h" #include +#include + #ifndef INVALID_SOCKET #define INVALID_SOCKET -1 #endif @@ -35,6 +37,69 @@ #define SOCKET_ERROR -1 #endif + +/* configure socket-stack */ +#ifdef _WIN32 +#define WIN32_LEAN_AND_MEAN +#define USE_GETADDRINFO +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include +#include +#include +#include +#elif defined(USE_AMITCP) +#include +#include +#include +#include +#define SOCKET int +#define INVALID_SOCKET -1 +#define select(n,r,w,e,t) WaitSelect(n,r,w,e,t,0) +#define closesocket(x) CloseSocket(x) +#else +#include +#include +#include +#include +#include +#define SOCKET int +#define INVALID_SOCKET -1 +#define closesocket(x) close(x) +#endif + +#define CLIENT_GREET "hello, synctracker!" +#define SERVER_GREET "hello, demo!" + +enum { + SET_KEY = 0, + DELETE_KEY = 1, + GET_TRACK = 2, + SET_ROW = 3, + PAUSE = 4, + SAVE_TRACKS = 5 +}; + +static inline int socket_poll(SOCKET socket) +{ + struct timeval to = { 0, 0 }; + fd_set fds; + + FD_ZERO(&fds); + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + FD_SET(socket, &fds); +#ifdef _MSC_VER +#pragma warning(pop) +#endif + + return select((int)socket + 1, &fds, NULL, NULL, &to) > 0; +} + static int s_clientIndex; int s_socket = INVALID_SOCKET; int s_serverSocket = INVALID_SOCKET; diff --git a/ogl_editor/src/TrackData.c b/ogl_editor/src/TrackData.c index 6e04fca..0bb3582 100644 --- a/ogl_editor/src/TrackData.c +++ b/ogl_editor/src/TrackData.c @@ -2,22 +2,54 @@ #include "Commands.h" #include "rlog.h" #include +#include /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +int sync_find_track(struct sync_track **tracks, size_t num_tracks, const char *name) +{ + int i; + + for (i = 0; i < (int)num_tracks; ++i) + if (!strcmp(name, tracks[i]->name)) + return i; + return -1; /* not found */ +} + +int sync_create_track(struct sync_track ***tracksPtr, size_t *num_tracksPtr, const char *name) +{ + struct sync_track *t; + struct sync_track **tracks = *tracksPtr; + size_t num_tracks = *num_tracksPtr; + assert(sync_find_track(tracks, num_tracks, name) < 0); + + t = malloc(sizeof(*t)); + t->name = strdup(name); + t->keys = NULL; + t->num_keys = 0; + + tracks = realloc(tracks, sizeof(tracks[0]) * (num_tracks+1)); + tracks[num_tracks] = t; + + *num_tracksPtr = num_tracks+1; + *tracksPtr = tracks; + + return (int)num_tracks; +} + int TrackData_createGetTrack(TrackData* trackData, const char* name) { - int index = sync_find_track(&trackData->syncData, name); + int index = sync_find_track(trackData->syncTracks, trackData->num_syncTracks, name); if (index < 0) { - index = sync_create_track(&trackData->syncData, name); + index = sync_create_track(&trackData->syncTracks, &trackData->num_syncTracks, name); memset(&trackData->tracks[index], 0, sizeof(Track)); trackData->tracks[index].index = index; trackData->tracks[index].color = TrackData_getNextColor(trackData); } - if (trackData->syncData.tracks) - Commands_init(trackData->syncData.tracks, trackData); + if (trackData->syncTracks) + Commands_init(trackData->syncTracks, trackData); return index; } @@ -151,10 +183,9 @@ void TrackData_linkTrack(int index, const char* name, TrackData* trackData) void TrackData_linkGroups(TrackData* trackData) { int i, track_count; - struct sync_data* sync = &trackData->syncData; - for (i = 0, track_count = sync->num_tracks; i < track_count; ++i) - TrackData_linkTrack(i, sync->tracks[i]->name, trackData); + for (i = 0, track_count = trackData->num_syncTracks; i < track_count; ++i) + TrackData_linkTrack(i, trackData->syncTracks[i]->name, trackData); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/ogl_editor/src/TrackData.h b/ogl_editor/src/TrackData.h index eb276af..896abd2 100644 --- a/ogl_editor/src/TrackData.h +++ b/ogl_editor/src/TrackData.h @@ -64,7 +64,8 @@ typedef struct Group typedef struct TrackData { - struct sync_data syncData; + struct sync_track **syncTracks; + size_t num_syncTracks; Track tracks[EDITOR_MAX_TRACKS]; Group groups[EDITOR_MAX_TRACKS]; int* loopmarks; diff --git a/ogl_editor/src/TrackView.c b/ogl_editor/src/TrackView.c index 6e4ada2..17b5b8b 100644 --- a/ogl_editor/src/TrackView.c +++ b/ogl_editor/src/TrackView.c @@ -396,8 +396,8 @@ static int renderChannel(struct TrackInfo* info, int startX, Track* trackData, b folded = trackData->folded; - if (info->trackData->syncData.tracks) - track = info->trackData->syncData.tracks[trackData->index]; + if (info->trackData->syncTracks) + track = info->trackData->syncTracks[trackData->index]; size = renderName(trackData->displayName, startX, info->startY - (font_size * 2), min_track_size, folded, trackData->active); diff --git a/ogl_editor/src/loadsave.c b/ogl_editor/src/loadsave.c index 69a1610..b9815cd 100644 --- a/ogl_editor/src/loadsave.c +++ b/ogl_editor/src/loadsave.c @@ -6,6 +6,7 @@ #include #include #include +#include /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -100,7 +101,7 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) track_index = TrackData_createGetTrack(trackData, track_name); t = &trackData->tracks[track_index]; - track = trackData->syncData.tracks[track_index]; + track = trackData->syncTracks[track_index]; if (!color_text && t->color == 0) { @@ -161,7 +162,7 @@ static void parseXml(mxml_node_t* rootNode, TrackData* trackData) } else if (!strcmp("key", element_name)) { - struct sync_track* track = trackData->syncData.tracks[track_index]; + struct sync_track* track = trackData->syncTracks[track_index]; Track* t = &trackData->tracks[track_index]; const char* row = mxmlElementGetAttr(node, "row"); @@ -353,7 +354,6 @@ int LoadSave_saveRocketXML(const text_t* path, TrackData* trackData) FILE* fp; size_t p; - struct sync_data* sync_data = &trackData->syncData; int* bookmarks = trackData->bookmarks; int* loopmarks = trackData->loopmarks; @@ -409,9 +409,9 @@ int LoadSave_saveRocketXML(const text_t* path, TrackData* trackData) setElementInt(tracks, "endRow", "%d", trackData->endRow); setElementInt(tracks, "highlightRowStep", "%d", trackData->highlightRowStep); - for (p = 0; p < sync_data->num_tracks; ++p) + for (p = 0; p < trackData->num_syncTracks; ++p) { - const struct sync_track* t = sync_data->tracks[p]; + const struct sync_track* t = trackData->syncTracks[p]; mxml_node_t* track = mxmlNewElement(tracks, "track"); bool isMuted = trackData->tracks[p].muteBackup ? true : false;