0.20.4-dev

15 views
Skip to first unread message

lerosua

unread,
Oct 9, 2009, 9:23:46 AM10/9/09
to gmchess-dev
0.20.3已经发布。
其中用户选择黑棋的功能已添加。
至此,打通了网络对战的基本障碍。
下一步可以开始研究网络对战的功能了。

yalong

unread,
Oct 9, 2009, 10:07:42 AM10/9/09
to gmche...@googlegroups.com
hi,

我想参与网络对战功能的实现,想问下需要什么样的知识呢,做什么样的准备?
是不是得对socket编程熟悉一些,没有这方面的经验;我对于OO的理解也比较一般。

yalong

2009/10/9 lerosua <ler...@gmail.com>:

lerosua

unread,
Oct 9, 2009, 10:15:33 AM10/9/09
to gmche...@googlegroups.com
我也没有网络的经验。
所以此功能得慢慢研究。
第一步我打算取巧,利用pdigin之类的软件来通信。

yalong

unread,
Oct 9, 2009, 10:23:39 AM10/9/09
to gmche...@googlegroups.com
2009/10/9 lerosua <ler...@gmail.com>:
> 我也没有网络的经验。
> 所以此功能得慢慢研究。
> 第一步我打算取巧,利用pdigin之类的软件来通信。

lerosua的意思是通过pidgin么,对pidgin有一点点的了解。
gui+libpurple+plugins

libpurple是core,抽象出来了大多数通信协议通用的部分,plugins来实现具体的protocol。。
怎么实现,通过哪个protocol? qq估计不大行,现在不能用了;gtalk? msn?
不是特别能够理解。

恩,有兴趣。。。一起弄吧。。:)

yalong

lerosua

unread,
Oct 9, 2009, 10:33:23 AM10/9/09
to gmche...@googlegroups.com
说说大概的想法吧
大家都是gtalk上的好友,
只要互相发送一下fen串就能下棋了。
我是想通过pidgin的插件,可实现双方发送fen串。
具体怎样做也还没想好。

yalong

unread,
Oct 9, 2009, 10:49:53 AM10/9/09
to gmche...@googlegroups.com
恩,通过mail来说,这样也可以留一份copy在maillist~

互相发送fen串⋯⋯
目前,我是这么理解的,1种情况是两个用户直接通过ip来建立连接,这样的话也许可以不用通过libpurple做插件。大概是需要socket的编程,我们可以去找几个socket编程的例子来看。
2种情况是通过某个协议的账户来通信(比如,我跟你在gtalk上的某次通信内容是fen串?这个比较好玩,感觉)
3种情况是写一个独立的plugin吗?

现在,有一个问题需要先讨论下:打算作成什么样子的对战?
1两个人通过ip对战,只要知道对方的ip了就可以了。
2陌生人对战,这个陌生人认识的平台如何搭建?是否能够跟gmchess放在一起,比如,你登陆gmchess后直接点一个find
players的按键,就会列出当前等待对战的IPs?

yalong

2009/10/9 lerosua <ler...@gmail.com>:

lerosua

unread,
Oct 9, 2009, 11:25:20 AM10/9/09
to gmche...@googlegroups.com
基于ip或基于服务器的方式是比较传统的方法。
像qq游戏或中国游戏中心在线的象棋一样,基于自己的协议,有个大厅,然后登录进去,
找人对战。
以上都是比较传统的方式。

而我目前的想法,是快速地让网络上的两个人通过gmchess下起象棋。其它的再考虑。
也就是基于列表上好友的对战。陌生人的对战迟点再搞。

初步是想通过pidgin上的好友,发送fen串,然后通过dbus发送到gmchess上,通信是在
pidgin里,而表现在gmchess上的棋盘走动。

基于这个实现的原因是不想再另外搞一套协议啥的,让本来就使用gtalk/xmpp的用户很
方便就能下棋。而且搞传统服务器大厅登录的,可能还要运营服务器。


当然,之前hoxchess的作者接触过我。他那个程序就是有网络对战的协议的。他有大厅。
迟点gmchess也有想法去兼容那个。那个就是比较传统的方式,写socket登录,不过协议
是照着他那个来的。目前我还没去看过那协议。因为我想先自己实现基于xmpp的方式先。

基于pidgin插件的方式或许不太标准。但xmpp协议已经有在发展game方面的,你也可以
找找这方面的资料。

另外还有一个叫啥的开源棋牌游戏平台,GGZ gaming zone。

yalong

unread,
Oct 9, 2009, 11:46:35 AM10/9/09
to gmche...@googlegroups.com
Hi,

> 以上都是比较传统的方式。
使用ip进行连接是不需要运营服务器的吧,可以做一个demo出来,这样对基本的网络通信就有大致的了解了。

> 初步是想通过pidgin上的好友,发送fen串,然后通过dbus发送到gmchess上,通信是在
> pidgin里,而表现在gmchess上的棋盘走动。

不是特别明白。诶,如果通过管道呢? pidgin的消息都以标准输出形式打出来,gmchess的信息加个前缀标示一下,不需要的信息直接丢掉。
新的步骤通过管道发给pidgin。。

> 基于pidgin插件的方式或许不太标准。但xmpp协议已经有在发展game方面的,你也可以
> 找找这方面的资料。
ok,我去了解下关于xmpp协议的内容。

yalong

lerosua

unread,
Oct 9, 2009, 11:52:35 AM10/9/09
to gmche...@googlegroups.com
基于IP连接的做法是可以做,只是我觉得研究意义大于实用价值。
像我这样用内网的根本没啥机会用到。难道再去研究穿透内网吗。

目前就是想基于第二方案,管道或dbus都是进程间通信的问题。
当然还得再研究研究。看看怎么做方便。

yalong

unread,
Oct 10, 2009, 12:38:07 AM10/10/09
to gmche...@googlegroups.com
Hi,

想起来4G space的一篇文章:
日常事务可借助形形色色的 Gtalk 机器人, 以及 Twitter 上一些特别的机器人. 其中Gtalk 客户端最好使用 GNU
Freetalk, 可以自定义钩子(使用史上最优雅的 LISP 语言噢). 从而可以通过解析 Gtalk 消息调用系统程序.
比如我家有一台破电脑, 一直挂着Gtalk, 我在学校要回家之前就可以给这个Gtalk 发送信息让他提前打开我们家的空调或者电灯.

http://www.gnu.org/software/freetalk/

About Freetalk

Freetalk is a console based Jabber client. It features a readline
interface with completion of buddy names, commands, and even ordinary
English words. Freetalk is extensible, configurable, and scriptable
through a Guile interface.
看上去挺好玩的,研究研究。。

yalong

2009/10/9 lerosua <ler...@gmail.com>:

fantasy zheng

unread,
Oct 10, 2009, 12:45:27 AM10/10/09
to gmche...@googlegroups.com
个人觉得如果借助于pidgin,多少都有一些在一定程度上限制了gmchess的发展。

2009/10/10 yalong <agin...@gmail.com>

yalong

unread,
Oct 10, 2009, 9:04:30 AM10/10/09
to gmche...@googlegroups.com
Hi,

有道理~ 应该考虑一下。。

诶,如果用freetalk+pipe的话,这样弄如何?

FT language(/pipe+stdout) gmchess language(Fen)
freetalk <----------------------------------> bridge
<-------------------------------> gmchess

应该可以把。。
yalong


2009/10/10 fantasy zheng <fanta...@gmail.com>:

H

unread,
Oct 10, 2009, 10:55:59 AM10/10/09
to gmchess-dev
我的理解是第一步先要做到gchess能接受管道之外形式来的fen串(当然还可能有其他的控制消息),然后用现在的管道机制处理。这么做不会局限于某
一个im软件,只要这个im软件的本地端能把其他远端发过来的fen串(或其他消息)转发给gchess,并且可以从gchess接受fen串(或其他
消息)并转发给远端。
实现起来是两部分,一部分是gchess,把消息格式确定下来(也就是所谓的协议),接收,处理,发送功能实现。
另外的就是im部分,一般是写个插件实现和gchess的监听进程使用上面的协议通讯。这个插件是不用直接和远程网络打交道的。
不知道我说清楚没有,哈哈,因为我既不了解gchess,也不了解pidgin。

On 10月10日, 下午9时04分, yalong <aginob...@gmail.com> wrote:
> Hi,
>
> 有道理~ 应该考虑一下。。
>
> 诶,如果用freetalk+pipe的话,这样弄如何?
>
> FT language(/pipe+stdout) gmchess language(Fen)
> freetalk <----------------------------------> bridge
> <-------------------------------> gmchess
>
> 应该可以把。。
> yalong
>

> 2009/10/10 fantasy zheng <fantasy...@gmail.com>:
>
> > 个人觉得如果借助于pidgin,多少都有一些在一定程度上限制了gmchess的发展。
>
> > 2009/10/10 yalong <aginob...@gmail.com>


>
> >> Hi,
>
> >> 想起来4G space的一篇文章:
> >> 日常事务可借助形形色色的 Gtalk 机器人, 以及 Twitter 上一些特别的机器人. 其中Gtalk 客户端最好使用 GNU
> >> Freetalk, 可以自定义钩子(使用史上最优雅的 LISP 语言噢). 从而可以通过解析 Gtalk 消息调用系统程序.
> >> 比如我家有一台破电脑, 一直挂着Gtalk, 我在学校要回家之前就可以给这个Gtalk 发送信息让他提前打开我们家的空调或者电灯.
>
> >>http://www.gnu.org/software/freetalk/
>
> >> About Freetalk
>
> >> Freetalk is a console based Jabber client. It features a readline
> >> interface with completion of buddy names, commands, and even ordinary
> >> English words. Freetalk is extensible, configurable, and scriptable
> >> through a Guile interface.
> >> 看上去挺好玩的,研究研究。。
>
> >> yalong
>

> >> 2009/10/9 lerosua <lero...@gmail.com>:

yalong

unread,
Oct 10, 2009, 8:26:40 PM10/10/09
to gmche...@googlegroups.com
Hi,

我试着用了下pipe,做了一个bridge,大体思路是这样的:
在bridge里面start两个process,一个是gmchess,一个是freetalk..

通过pipe创建两个int, fd[0]和fd[1],通过fork()之后,两个process的fd[0]跟fd[1]是互相写入的,我之按照例子验证了一个方向,另外一个方向需要验证。
gmchess呢,可以通过某个参数传进这两个int,比如gmchess -netfight fd[0] fd[1];
freetalk还不清楚如何使用这两个int,如何调用她里面的/pipe,以及如何把回来的消息(包含fen)写到相应的fd[N]里面。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

/**
* bridge
*/

int
main(void)
{
int fd[2];
int n;
char line[12];

pipe(fd);

if ( fork() > 0 ) {
// start gmchess, with fd[0], fd[1]
close( fd[0] );
write( fd[1], "<fen>123456</fen>", 17 );
printf("gmchess sent fen!\n");
} else {
// start freetalk
close( fd[1] );
n = read( fd[0], line, 17 );
printf("freetalk got %s\n", line);
}
exit(0);
}

twomashu

unread,
Oct 12, 2009, 11:12:02 PM10/12/09
to gmchess-dev
这一方面gnome集成的empathy做了许多工作,使用Telepathy 和mission control是个很好的主意,

gnome游戏sudoko好像正在做这方面的工作,可以研究。。。

On 10月9日, 下午10时15分, lerosua <lero...@gmail.com> wrote:
> 我也没有网络的经验。
> 所以此功能得慢慢研究。
> 第一步我打算取巧,利用pdigin之类的软件来通信。
>
> On Fri, Oct 09, 2009 at 10:07:42PM +0800, yalong wrote:
> >hi,
>
> >我想参与网络对战功能的实现,想问下需要什么样的知识呢,做什么样的准备?
> >是不是得对socket编程熟悉一些,没有这方面的经验;我对于OO的理解也比较一般。
>
> > yalong
>

> >2009/10/9 lerosua <lero...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages