gcrfc
(usa Ubuntu)
Enviado em 23/11/2011 - 00:12h
EnzoFerber escreveu:
Você tá querendo fazer o banco de dados do programa na unha?
A linguagem C no linux já tem biblioteca incluída para acesso/manipulação de MySQL. Acho que seria mais fácil. Aqui no VOL mesmo tem alguns artigos sobre isso.
Mas, se quiser fazer na mão, vai ter que fazer um servidor de banco de dados e com abertura de sockets. Para isso, monte uma lista encadeada ou árvore binária. As listas duplamente encadeadas são MUITO mais fáceis de implementar que as árvores AVL, e acho que é a opção sensata para seu problema, já que você planeja ter até 1000 cadastros (players). Eu mesmo tenho um artigo aqui no VOL sobre Listas Encadeadas.
Sockets:
~~~~~~~~
http://www.linuxhowtos.org/C_C++/socket.htm
http://cs.baylor.edu/~donahoo/practical/CSockets/textcode.html
http://gnosis.cx/publish/programming/sockets.html
Bom, como você pode ver, um exemplo de um programa desse seria bem grande, e acredito que apenas as referencias e guias aqui expostos devam ajudar. Qualquer dúvida específica, é só perguntar.
Programa 1 - Banco de Dados + Função Servidor
Lista duplamente encadeada com algum algoritmo de criptografia.(MD5 é bem legal pra guardar senhas ;)
Abertura de porta TCP/IP para servidor. (ex: 1234)
Funções de autenticação de usuário.
Programa 2 - GameServer - Programa cliente/servidor condicional.
QUANDO um cliente se conectar a ele com um login e senha, este GS vai se conectar ao servidor e pedir autenticação.
Para a função de servidor DO GAMESERVER, use uma porta diferente da usada pelo servidor DO BANCO DE DADOS.
Ou seja, ela trabalha APENAS como servidor enquanto não houver ninguém conectado a ele, depois ele VIRA CLIENTE DO BANCO DE DADOS e continua sendo servidor de clientes.
Programa 3 - Cliente ;)
GameServer.C - Pseudo-code
~~~~~~~~~~~~
server(){
socket();
bind();
listen();// aqui você fala quantos podem se conectar simultaneamente
if( accept()... ){
conexão_bd = connect(); // aqui você conecta no banco de dados
// aqui você envia os dados etc
}
}
Se quiser realmente dar um passo além e sofisticar a coisa toda, pode pesquisar sobre POSIX threads... Ai a coisa fica bem legal... mais bem mais complicada... ;)
Espero ter ajudado,
Qualquer coisa posta denovo,
Enzo Ferber
[]'s
puts kra vlw pela sua atenção, pois é eu gostaria de fazer a db na marra ^^, pois usando mysql ja existe, infelizmente nem um terminado, mas existe toda a base pronta!
vou deixar aki umas SSs da DB com o GS apenas e uma com a DB o GS e 1 Cliente
http://imageshack.us/photo/my-images/404/dbtm.jpg/
http://imageshack.us/photo/my-images/560/dbtmclconnected.jpg/
como vc pode ver, as telas do cmd, para a DB e para o GS, são partes do Patch q foi feito no emulador original, para este aceitar conexoes dos clientes mais atuais!
e a cmd do cliente, é um packet tracer q foi feito para snifarmos os packets q o cliente envia para podermos corrigir as diferenças!
porem tem muito packets do cliente atual q almentaram em relação ao emulador q temos 6.13, e atualizar todos o emulador pormeio a dll fica meio q inviavel, por isso decidimos fazer o emulador!
nessas SSs, o char ainda nao esta no WORLD do jogo, quando ele entra no WORLD, o GS, fik pingando tando no cliente quanto na DB, de tantos em tantos segundos, e o q eu gostaria é um sistema parecido com esse!
vou estudar os links q vc me indicou.
vlw ae pela ajuda ^^