samedi 14 avril 2007

jathena en standby, bugs et autres projets

Le login-server server est présentement en "standby" depuis environ trois mois et le restera encor une durée indéterminé. La raison de cette pause momentané est le peu de feedback recu des hypotéthique utilisateurs et un bog persistant malgrés mes nombreux et insistants effort de chasseur de bogue. Il y a aussi que j'ai un autre projet dont je peut-être parler plus en détaille une autre fois.

lundi 18 décembre 2006

courte nouvelle

Pour ceux(celle) qui on de la difficulté à installé le serveur j'ai mis un installateur sur sourceforge : http://sourceforge.net/projects/javathena/

Et j'ai retirer temporairement la console.

mardi 12 décembre 2006

La solution aux struct

J'ai finalement trouvé une solution. Et cela était plus simple que je le pensait.
Exemple pour PartyMember:

public void toByteTable(byte[] tab, int startInd)
{
//copi l'entier à partir de startInd j'usqu'à (startInd + la longueur du champ)
Functions.intToByteTab(account_id, startInd,
startInd += Constants.INT_LENTH, tab);
Functions.intToByteTab(char_id, startInd,
startInd += Constants.INT_LENTH, tab);
//les String sont en fait des tableaux de charatères(char) et un char a
//la même dimention qu'un byte
Functions.stringToUnsignedByteTable(name, tab, startInd,
startInd += Constants.NAME_LENGTH);
Functions.intToByteTab(class_, startInd,
startInd += Constants.SHORT_LENTH, tab);
Functions.intToByteTab(map, startInd,
startInd += Constants.SHORT_LENTH, tab);
Functions.intToByteTab(lv, startInd, startInd += Constants.SHORT_LENTH,
tab);
Functions.intToByteTab(leader ? 1 : 0, startInd, startInd++, tab);
Functions.intToByteTab(online ? 1 : 0, startInd, startInd++, tab);
}
Functions.intToByteTab(int aInt, int startInd, int endInd, byte[] aByteTab) :

public static void intToByteTab(int aInt, int startInd, int endInd, byte[] aByteTab)
{
for (int i = startInd; i < endInd && aInt != 0; i++)
{
//donne le reste de la division de l'entier par 256
aByteTab[i] = (byte) (aInt % 256);
aInt /= 256;
}
}

exemple après l'exécutionde
Functions.intToByteTab(1283402, 0, 4, aByteTab);
aByteTab contiendra : {74, 149, 19, 0}
dans le sens inverse : 74 * 256^0 + 149 * 256^1 + 19 * 256^2 + 0 * 256^3

dimanche 10 décembre 2006

Les structs pausent problèmes

Les structs sont un peu l'encêtre des object en java ou en C++. Ils regroupent un ensemble de variables, mais ils ne peuvent ni contenir de méthode, ni de contructeur et ils ont d'autre particularitées dont je ne ferai pas mention ici.

Le problème que pausent les structs dans eathena n'est pas dans sa convertion en tant que tel mais plutot lors déchanges entre le serveur char et le le serveur map. En effet lors du transfère le struct est transformer implicitement en tableau.
Exemple dans int_party.c :

int mapif_party_info(int fd, struct party *p)
{
unsigned char buf[2048];

WBUFW(buf,0) = 0x3821; //entête du paquet
//buf + 4 dis à memcpy de copier la variable p dans le tableau buff à partir de
//l'index 4 du tableau
//sizeof(struct party) donne la quantité de memoire pour necessaire pour stocké //le struct dans le tableau
memcpy(buf + 4, p, sizeof(struct party));
// ajoute la dimention du tableau
WBUFW(buf,2) = 4 + sizeof(struct party);
if (fd < 0)
mapif_sendall(buf, WBUFW(buf,2));
else
mapif_send(fd, buf, WBUFW(buf,2));
return 0;
}
La difficulter est donc de transformé un object java en tableau compatible avec ce que le serveur map attend, ce qui à première vue me semble fesable mais long et un peu compliquer. J'ai déja une petite idée de ce que je vais faire. Dès que cela sera foncionnel je la mettrai sur mon blogue.

mardi 5 décembre 2006

Beanshell

Beanshell est un terminal java qui interprète du code java directement sans compile.
Il peut interpréter aussi un langage scripte semblable au java. Je pense qu'il pourrait êtres tres utiles a mon projet javAthena. J'ai d'ailleurs fait une console pour le serveur login JavAthena il est disponible sur : https://sourceforge.net/projects/javathena/ .

JavAthena se sert aussi de javolution une librairie principalement de collection comme fastTable, fastMap, etc. Ces class ont leurs équivalents dans la jdk de sun mais elles sont plus rapide lorsqu'elles contiennent de grandes quantité d'information.

lundi 27 novembre 2006

JavAthena

Tout commence lorsque j'ai commence a jouer a la beta public de RagnarokOnline. RagnarokOnline est un mmorpg(Massivement Multi-joueur Online Role Playing Game) .
Je suis vite devenu accrot a ce jeu.
Mais j'ai arete de jouer quelque mois apres qu'il soit devenu payant(bizarement),
mais quelque temp plus tard j'ai trouver un emulateur de serveur, qui est maintenant fermer. Ce que je pensait totalement imposible. Je l'ai tester un peu, puis un jour je suis tomber sur eAthena http://eathena.ws/board/ qui est un projet c open-source.
J'ai regarder le code qui a ma grande surprise etait tres semblable au java. Le code est d'une qualite assez ordinaire, ce qui est surment du aux nombreux programmeurs et put-etre a un manque d'organisation, mais surtout parce qu'ils semblent priorise les nouveautes.

Mais il est lisible pour moi programmeur moyen.
J'ai ete etonne de voir comment il etait facile de traduire ce code au java.
Au debut j'ai traduit le serveur login presque litteralement, une fois que j'ai vue qu'il
fonctionnait je l'ai modifier.
Le serveur est divise en trois parties independantes Login/Character/Map.
Le serveur login est diviser en deux parti principal : la gestion des donnes(account, configuration, droit, ...) et les connections(les client, les autres serveurs et les requetes qu'ils font) .
Difficile fut la derniere partie, car je ne comprenais pas comment les echanges se faisaient. Apres plusieurs essaies erreurs j'ai compris que le serveur envoyait tout simplement
des tableaux de byte non-signer. Ces tableau contenait les informations en clair donc non hrypeter(Il n'y que les mots de passes qui peuvent l'etre).
A partir de ce moment le reste fut relativement facil.

Pour le moment je considere le serveur-login comme fonctionnel.
Mais faute de testeurs je ne saurais dire si le tout fonctionne correctement.
Je commence le serveur-character et je songe serieusement a ajouter un interpreteur beanshell,
pour avoir un meilleur controle sur le serveur l'orsqu'il fonctionne.

ps desoler pour les fautes(je modifierai mon poste prochainement)

Bonjour

Je me presente
Mon nom est Francois, je vis a Montreal(Canada) depuis mon enfance.
J'ai commence a aimer l'informatique des que je suis entre en contactes avec. 

Je suis aller au cegep en Informatique de gestion(je detest la gestion mais entre ca et reseau...). J'y ai appris la base meme si j'apprend toujours sur le tas. J'ai passe tout mes cours de base avec + ou - de facilite(sauf litterature quebecoise et mes cour de gestions). Mais je n'ai toujours pas reussi l'epreuve uniforme de francais(dissertation de 900 mots qui dure 4 heure) apres 4 essais je suis vraiment desespere... 

J'aime bien le cafe que je prend presque toujours noire. J'aime beaucoup programmer, surtout en java.