我想参与网络对战功能的实现,想问下需要什么样的知识呢,做什么样的准备?
是不是得对socket编程熟悉一些,没有这方面的经验;我对于OO的理解也比较一般。
yalong
2009/10/9 lerosua <ler...@gmail.com>:
lerosua的意思是通过pidgin么,对pidgin有一点点的了解。
gui+libpurple+plugins
libpurple是core,抽象出来了大多数通信协议通用的部分,plugins来实现具体的protocol。。
怎么实现,通过哪个protocol? qq估计不大行,现在不能用了;gtalk? msn?
不是特别能够理解。
恩,有兴趣。。。一起弄吧。。:)
yalong
互相发送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>:
而我目前的想法,是快速地让网络上的两个人通过gmchess下起象棋。其它的再考虑。
也就是基于列表上好友的对战。陌生人的对战迟点再搞。
初步是想通过pidgin上的好友,发送fen串,然后通过dbus发送到gmchess上,通信是在
pidgin里,而表现在gmchess上的棋盘走动。
基于这个实现的原因是不想再另外搞一套协议啥的,让本来就使用gtalk/xmpp的用户很
方便就能下棋。而且搞传统服务器大厅登录的,可能还要运营服务器。
当然,之前hoxchess的作者接触过我。他那个程序就是有网络对战的协议的。他有大厅。
迟点gmchess也有想法去兼容那个。那个就是比较传统的方式,写socket登录,不过协议
是照着他那个来的。目前我还没去看过那协议。因为我想先自己实现基于xmpp的方式先。
基于pidgin插件的方式或许不太标准。但xmpp协议已经有在发展game方面的,你也可以
找找这方面的资料。
另外还有一个叫啥的开源棋牌游戏平台,GGZ gaming zone。
> 以上都是比较传统的方式。
使用ip进行连接是不需要运营服务器的吧,可以做一个demo出来,这样对基本的网络通信就有大致的了解了。
> 初步是想通过pidgin上的好友,发送fen串,然后通过dbus发送到gmchess上,通信是在
> pidgin里,而表现在gmchess上的棋盘走动。
不是特别明白。诶,如果通过管道呢? pidgin的消息都以标准输出形式打出来,gmchess的信息加个前缀标示一下,不需要的信息直接丢掉。
新的步骤通过管道发给pidgin。。
> 基于pidgin插件的方式或许不太标准。但xmpp协议已经有在发展game方面的,你也可以
> 找找这方面的资料。
ok,我去了解下关于xmpp协议的内容。
yalong
目前就是想基于第二方案,管道或dbus都是进程间通信的问题。
当然还得再研究研究。看看怎么做方便。
想起来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>:
有道理~ 应该考虑一下。。
诶,如果用freetalk+pipe的话,这样弄如何?
FT language(/pipe+stdout) gmchess language(Fen)
freetalk <----------------------------------> bridge
<-------------------------------> gmchess
应该可以把。。
yalong
2009/10/10 fantasy zheng <fanta...@gmail.com>:
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>:
我试着用了下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);
}
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>: