summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvictor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2003-08-23 21:24:28 +0800
committervictor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2003-08-23 21:24:28 +0800
commitd74a38bf714ecb672600885e40aca8844681230f (patch)
tree2af5dd146529c2c8aada78ed549f8bcb3cc43ae5
parentb04e7cd33f3ce0e82147d0ca4b18be7b8c2c9ddd (diff)
downloadpttbbs-d74a38bf714ecb672600885e40aca8844681230f.tar
pttbbs-d74a38bf714ecb672600885e40aca8844681230f.tar.gz
pttbbs-d74a38bf714ecb672600885e40aca8844681230f.tar.bz2
pttbbs-d74a38bf714ecb672600885e40aca8844681230f.tar.lz
pttbbs-d74a38bf714ecb672600885e40aca8844681230f.tar.xz
pttbbs-d74a38bf714ecb672600885e40aca8844681230f.tar.zst
pttbbs-d74a38bf714ecb672600885e40aca8844681230f.zip
temp again
git-svn-id: http://opensvn.csie.org/pttbbs/branches/victor.bank@1133 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--pttbbs/include/proto.h2
-rw-r--r--pttbbs/mbbsd/chc_net.c11
-rw-r--r--pttbbs/mbbsd/chc_play.c19
-rw-r--r--pttbbs/mbbsd/mbbsd.c2
-rw-r--r--pttbbs/mbbsd/talk.c14
5 files changed, 27 insertions, 21 deletions
diff --git a/pttbbs/include/proto.h b/pttbbs/include/proto.h
index ff82f2e6..d3b6058d 100644
--- a/pttbbs/include/proto.h
+++ b/pttbbs/include/proto.h
@@ -172,7 +172,7 @@ void chc_redraw(chcusr_t *user1, chcusr_t *user2, board_t board);
/* chc_net */
//void chc_sendmove(int s);
//int chc_recvmove(int s);
-void chc_broadcast_recv(chc_act_list *act_list, board_t board);
+int chc_broadcast_recv(chc_act_list *act_list, board_t board);
void chc_broadcast_send(chc_act_list *act_list, board_t board);
/* chc_play */
diff --git a/pttbbs/mbbsd/chc_net.c b/pttbbs/mbbsd/chc_net.c
index c3273cf1..d82066e7 100644
--- a/pttbbs/mbbsd/chc_net.c
+++ b/pttbbs/mbbsd/chc_net.c
@@ -36,8 +36,10 @@ chc_send_status(int sock, board_t board){
static void
chc_broadcast(chc_act_list *p, board_t board){
while(p){
- if (!(p->flag & CHC_ACT_BOARD))
+ if (!(p->flag & CHC_ACT_BOARD)){
chc_send_status(p->sock, board);
+ p->flag |= CHC_ACT_BOARD;
+ }
if (chc_sendmove(p->sock) < 0) {
if (p->next->next == NULL)
p = NULL;
@@ -51,13 +53,16 @@ chc_broadcast(chc_act_list *p, board_t board){
}
}
-void
+int
chc_broadcast_recv(chc_act_list *act_list, board_t board){
- chc_recvmove(act_list->sock);
+ if (!chc_recvmove(act_list->sock))
+ return 0;
chc_broadcast(act_list->next, board);
+ return 1;
}
void
chc_broadcast_send(chc_act_list *act_list, board_t board){
chc_broadcast(act_list, board);
}
+
diff --git a/pttbbs/mbbsd/chc_play.c b/pttbbs/mbbsd/chc_play.c
index a1014b95..7efbaaca 100644
--- a/pttbbs/mbbsd/chc_play.c
+++ b/pttbbs/mbbsd/chc_play.c
@@ -63,11 +63,7 @@ hisplay(int s, chcusr_t *user1, chcusr_t *user2, board_t board, board_t tmpbrd)
}
break;
case I_OTHERDATA:
-<<<<<<< .mine
if (!chc_broadcast_recv(act_list, board)) { /* disconnect */
-=======
- if (!chc_recvmove(s)) { /* disconnect */
->>>>>>> .r1129
endturn = 1;
endgame = 1;
} else {
@@ -115,11 +111,7 @@ myplay(int s, chcusr_t *user1, chcusr_t *user2, board_t board, board_t tmpbrd)
ch = 'q';
switch (ch) {
case I_OTHERDATA:
-<<<<<<< .mine
if (!chc_broadcast_recv(act_list, board)) { /* disconnect */
-=======
- if (!chc_recvmove(s)) { /* disconnect */
->>>>>>> .r1129
endgame = 1;
endturn = 1;
} else if (chc_from.r == -1 && chc_ipass) {
@@ -312,20 +304,24 @@ chc(int s, int type)
strlcpy(userid[0], uinfo->userid, sizeof(userid[0]));
strlcpy(userid[1], uinfo->mateid, sizeof(userid[1]));
play_func[0] = play_func[1] = hisplay;
+ timeout_read(s, 60);
read(s, &board, sizeof(board));
/////// nessesery? correct?
read(s, &chc_turn, sizeof(chc_turn));
}
else {
- act_list = (chc_act_list *)malloc(sizeof(*act_list));
- act_list->sock = s;
- act_list->next = 0;
strlcpy(userid[0], cuser.userid, sizeof(userid[0]));
strlcpy(userid[1], currutmp->mateid, sizeof(userid[1]));
play_func[0] = myplay;
play_func[1] = hisplay;
}
+ if (type != CHC_WATCH) {
+ act_list = (chc_act_list *)malloc(sizeof(*act_list));
+ act_list->sock = s;
+ act_list->next = 0;
+ }
+
getuser(userid[0]);
chcusr_get(&xuser, &user1);
getuser(userid[1]);
@@ -333,6 +329,7 @@ chc(int s, int type)
chc_init(s, &user1, &user2, board);
mainloop(s, &user1, &user2, board, play_func);
+
if (type == CHC_VERSUS) {
while(act_list){
close(act_list->sock);
diff --git a/pttbbs/mbbsd/mbbsd.c b/pttbbs/mbbsd/mbbsd.c
index f4026102..2e0794dd 100644
--- a/pttbbs/mbbsd/mbbsd.c
+++ b/pttbbs/mbbsd/mbbsd.c
@@ -248,7 +248,7 @@ dosearchuser(char *userid)
return usernum;
}
-static void
+void
talk_request(int sig)
{
bell();
diff --git a/pttbbs/mbbsd/talk.c b/pttbbs/mbbsd/talk.c
index 98a8d708..72a51131 100644
--- a/pttbbs/mbbsd/talk.c
+++ b/pttbbs/mbbsd/talk.c
@@ -1216,11 +1216,12 @@ my_talk(userinfo_t * uin, int fri_stat)
uin->lockmode == M_FIVE || uin->lockmode == CHC) {
if (ch == CHC) {
kill(uin->pid, SIGUSR1);
- sock = make_connection_to_somebody(uin, 20);
- if (sock < 0)
+ if ((sock = make_connection_to_somebody(uin, 20)) < 0)
vmsg("無法建立連線");
- strlcpy(currutmp->mateid, uin->userid, sizeof(currutmp->mateid));
- chc(sock, CHC_WATCH);
+ else {
+ strlcpy(currutmp->mateid, uin->userid, sizeof(currutmp->mateid));
+ chc(sock, CHC_WATCH);
+ }
}
else
outs("人家在忙啦");
@@ -2551,6 +2552,8 @@ reply_connection_request(userinfo_t *uip)
struct hostent *h;
struct sockaddr_in sin;
+ uip = &SHM->uinfo[currutmp->destuip];
+
if (uip->mode != PAGE) {
snprintf(genbuf, sizeof(genbuf),
"%s已停止呼叫,按Enter繼續...", page_requestor);
@@ -2569,6 +2572,7 @@ reply_connection_request(userinfo_t *uip)
memcpy(&sin.sin_addr, h->h_addr, h->h_length);
sin.sin_port = uip->sockaddr;
a = socket(sin.sin_family, SOCK_STREAM, 0);
+ ///////////////
if ((connect(a, (struct sockaddr *) & sin, sizeof(sin)))) {
perror("connect err");
return -1;
@@ -2642,7 +2646,7 @@ talkreply(void)
if (!getdata(b_lines, 0, "不能的原因:", genbuf, 60, DOECHO))
strlcpy(genbuf, "不告訴你咧 !! ^o^", sizeof(genbuf));
write(a, genbuf, 60);
-
+ }
uip->destuip = currutmp - &SHM->uinfo[0];
if (buf[0] == 'y')