commit 52d333cb08d91966b560a22a2082ca21fc5f6d83
parent a2af8a87833e1d56a6bb5e45d5d4948cdc1c633d
Author: David Engel <david@absentmindedproductions.ca>
Date:   Sun,  9 Aug 2015 21:35:39 -0400
sl: added join list message handling, start of leave list
Diffstat:
| M | sl | | | 49 | ++++++++++++++++++++++++++++++++++++++++++++++++- | 
1 file changed, 48 insertions(+), 1 deletion(-)
diff --git a/sl b/sl
@@ -48,7 +48,7 @@ $dbh->do(qq{create table if not exists lists(
 }) or die $DBI::errstr;
 
 $dbh->do(qq{create table if not exists list_members(
-	list_id int not null primary key,
+	list_id int not null,
 	device_id text not null,
 	joined_date int not null,
 	primary key(list_id, device_id),
@@ -85,6 +85,9 @@ my $sql = qq{insert into lists (list_id, name, first_created, last_updated)
 	values (?, ?, ?, ?)};
 my $new_list_sth = $dbh->prepare($sql);
 
+$sql = qq{delete from lists where list_id=?};
+my $remove_list_sth = $dbh->prepare($sql);
+
 $sql = qq{insert into devices (token, phone_num, first_seen) values (?, ?, ?)};
 my $new_device_sth = $dbh->prepare($sql);
 
@@ -119,6 +122,11 @@ my $get_list_members_sth = $dbh->prepare($sql);
 $sql = qq{insert into list_members (list_id, device_id, joined_date) values (?, ?, ?)};
 my $new_list_member_sth = $dbh->prepare($sql);
 
+$sql = qq{delete from list_members where list_id = ? and device_id = ?};
+my $remove_list_member_sth = $dbh->prepare($sql);
+
+$sql = qq{select device_id from list_members where list_id = ? and device_id = ?};
+my $check_list_member_std = $dbh->prepare($sql);
 
 print "info: ready for connections on $local_addr_port\n";
 while (my ($new_sock, $bin_addr) = $sock->accept()) {
@@ -186,6 +194,12 @@ while (my ($new_sock, $bin_addr) = $sock->accept()) {
 	elsif ($msg_type == 3) {
 		msg_list_request($new_sock, $addr, $msg);
 	}
+    elsif ($msg_type == 4) {
+		msg_join_list($new_sock, $addr, $msg);
+    }
+    elsif ($msg_type == 5) {
+        msg_leave_list($new_sock, $addr, $msg);
+    }
 
 	close($new_sock);
 }
@@ -276,6 +290,39 @@ sub msg_new_list
 	print $new_sock $list_id;
 }
 
+sub msg_join_list
+{
+    my $new_sock = shift;
+    my $addr = shift;
+    my $msg = shift;
+
+    my ($device_id, $list_id) = split("\0", $msg);
+
+    if (device_id_invalid($device_id, $addr)) {
+        close $new_sock;
+        next;
+    }
+    print "info: $addr: device $device_id\n";
+    print "info: $addr: list $list_id\n";
+    
+    my $time = time;
+    $new_list_member_sth->execute($list_id, $device_id, $time);
+}
+
+sub msg_leave_list
+{
+    my $new_sock = shift;
+    my $addr = shift;
+    my $msg = shift;
+
+    my ($device_id, $list_id) = split("\0", $msg);
+
+    if (device_id_invalid($device_id, $addr)) {
+        close $new_sock;
+        next;
+    }
+}
+
 sub msg_update_friends
 {
 	my $new_sock = shift;