summaryrefslogtreecommitdiff
path: root/MySpace/server_con.cpp
diff options
context:
space:
mode:
authorsje <sje@4f64403b-2f21-0410-a795-97e2b3489a10>2007-07-07 08:53:28 +0000
committersje <sje@4f64403b-2f21-0410-a795-97e2b3489a10>2007-07-07 08:53:28 +0000
commit4e471713e5b2b650fe430e1850fb5ac47d06446a (patch)
tree0366a919e8a6f1a15545d418070b453f4a13c09c /MySpace/server_con.cpp
parent675c4d3aa28f6589b759062b7c9b151de0b64255 (diff)
basic mail/blog comment notification
git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@257 4f64403b-2f21-0410-a795-97e2b3489a10
Diffstat (limited to 'MySpace/server_con.cpp')
-rw-r--r--MySpace/server_con.cpp41
1 files changed, 40 insertions, 1 deletions
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() {