diff --git a/common.ts b/common.ts index 5282330..5ad78da 100644 --- a/common.ts +++ b/common.ts @@ -1,2 +1,3 @@ export * from './dataTypes'; export * from './messageTypes'; +export * from './parseMessage'; diff --git a/parseMessage.ts b/parseMessage.ts new file mode 100644 index 0000000..ae5782d --- /dev/null +++ b/parseMessage.ts @@ -0,0 +1,40 @@ +import { + ChatMessage, + Join, + ListenerJoined, + ListenerLeft, + ListenerList, SearchSong, SearchSongResult, + SendChatMessage, + StuenMessage +} from "./messageTypes"; + +export default function parseMessage(message: string): StuenMessage | null { + try { + const data = JSON.parse(message); + + switch (data.type) { + case 'Join': + return new Join(data.name); + case 'ListenerJoined': + return new ListenerJoined(data.name); + case 'ListenerLeft': + return new ListenerLeft(data.name); + case 'ListenerList': + return new ListenerList(data.names); + case 'SendChatMessage': + return new SendChatMessage(data.message); + case 'ChatMessage': + return new ChatMessage(data.name, data.message); + case 'SearchSong': + return new SearchSong(data.query); + case 'SearchSongResult': + return new SearchSongResult(data.result); + default: + console.error('Unknown message type:', data.type); + return null; + } + } catch (error) { + console.error('Error parsing WebSocket message:', error); + return null; // Handle parsing errors + } +}