shlist

share and manage lists between multiple people
Log | Files | Refs

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:
Msl | 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;