From 4e471713e5b2b650fe430e1850fb5ac47d06446a Mon Sep 17 00:00:00 2001 From: sje Date: Sat, 7 Jul 2007 08:53:28 +0000 Subject: basic mail/blog comment notification git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@257 4f64403b-2f21-0410-a795-97e2b3489a10 --- MySpace/server_con.cpp | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'MySpace/server_con.cpp') diff --git a/MySpace/server_con.cpp b/MySpace/server_con.cpp index eff0c90..094e5dd 100644 --- a/MySpace/server_con.cpp +++ b/MySpace/server_con.cpp @@ -33,6 +33,7 @@ HANDLE server_connection = 0; int sesskey = 0, req_id = 1, my_uid = 0; int signon_status = ID_STATUS_ONLINE; char signon_status_msg[512] = {0}; +CRITICAL_SECTION write_cs; bool WriteData(char *fn, int fn_size, char *data, int data_size) { char szTempPath[MAX_PATH], szTempFileName[MAX_PATH]; @@ -171,7 +172,11 @@ HANDLE CreateContact(int uid, char *nick, char *email, bool add_buddy) { void SendMessage(ClientNetMessage &msg) { char packet[4096]; int packet_size = msg.make_packet(packet, 4096); - if(server_connection) Netlib_Send(server_connection, packet, packet_size, MSG_DUMPASTEXT); + if(server_connection) { + EnterCriticalSection(&write_cs); + Netlib_Send(server_connection, packet, packet_size, MSG_DUMPASTEXT); + LeaveCriticalSection(&write_cs); + } } void CALLBACK sttMainThreadStatusCallback( ULONG dwParam ) { @@ -268,7 +273,25 @@ void ParseStatusMessage(HANDLE hContact, PipedStringList &l) { DBWriteContactSettingStringUtf(hContact, MODULE, "StatusMsg", smsg); } +void __cdecl CheckMailThreadFunc(void*) { + while(server_connection) { + ClientNetMessage chk_msg; + chk_msg.add_int("persist", 1); + chk_msg.add_int("sesskey", sesskey); + chk_msg.add_int("uid", my_uid); + chk_msg.add_int("cmd", 1); + chk_msg.add_int("dsn", 7); + chk_msg.add_int("lid", 18); + chk_msg.add_int("rid", req_id++); + chk_msg.add_string("body", ""); + SendMessage(chk_msg); + SleepEx(3 * 60 * 1000, TRUE); + } +} + void __cdecl ServerThreadFunc(void*) { + InitializeCriticalSection(&write_cs); + NETLIBOPENCONNECTION conn_data = {0}; conn_data.cbSize = sizeof(NETLIBOPENCONNECTION); conn_data.flags = NLOCF_V2; @@ -426,6 +449,10 @@ void __cdecl ServerThreadFunc(void*) { msg_setinfo.add_dict("info", ld); SendMessage(msg_setinfo); */ + + // start mail checking thread + mir_forkthread(CheckMailThreadFunc, 0); + } else if(msg.get_int("bm") == 100) { // status message int uid = msg.get_int("f"); if(uid) { @@ -643,6 +670,16 @@ void __cdecl ServerThreadFunc(void*) { int code = body.get_int("Code"); if(nick_dialog) PostMessage(nick_dialog, WMU_CHANGEOK, (WPARAM)(code == 0), msg.get_int("rid")); } + } else + if(cmd == 1 && dsn == 7 && lid == 18) { // mail info? + Dictionary body = msg.get_dict("body"); + char b[10]; + if(body.get_string("BlogComment", b, 10)) { + PUShowMessage("You have new blog comments", SM_NOTIFY); + } + if(body.get_string("Mail", b, 10)) { + PUShowMessage("You have new mail", SM_NOTIFY); + } } } buffer_bytes -= (end - pbuff); @@ -665,6 +702,8 @@ void __cdecl ServerThreadFunc(void*) { QueueUserAPC(sttMainThreadStatusCallback, mainThread, ID_STATUS_OFFLINE); myspace_server_running = false; SetAllOffline(); + + DeleteCriticalSection(&write_cs); } void StartThread() { -- cgit v1.2.3