Tout d’abord Ckky, j’ai tenté, il y a quelques mois aussi d’envoyer mes propres émoticones mais sans jamais y arriver et pourtant j’ai cherché et tout retourné mais avec le manque de doc c’est pas évidant !
Il y a pourtant une classe nommée "EmoticonMessage" qui hérite de NetworkMessage mais je n’ai jamais réussit a le mettre en oeuvre 🙁
Si d’ailleurs des personnes ont des infos, je suis preneur 🙂
jc > aucune idée ! Si l’exemple fourni avec les sources ne marchent pas c’est qu’en effet il y a un problème qui doit venir d’en dessus !! Google est ton ami 🙂
Flo > pour toi, l’erreur est normale !! Tu déclare un objet "Conversation" sans l’instancier; il est donc normal que tu ne puisse accéder a ses membres ! Mais même en l’instanciant, cela ne marchera pas, car ta conversation n’est pas rattaché a une conversation !!
La solution est simple, (et la le reflector est ton ami :)) => le sender passé est de type "SBMessageHandler" qui propose la méthode "SendTextMessage"
Ce qui revient a écrire :
Public Sub TextMessageReceived(ByVal sender As Object, ByVal e As TextMessageEventArgs)
Debug.WriteLine(e.Sender.Mail & " send " & e.Message.Text)
If e.Message.Text.ToLower().StartWith("coucou") Then
Dim sMessage As New XihSolutions.DotMSN.TextMessage("Hello")
CType(sender, SBMessageHandler)
.SendTextMessage(sMessage)
End If
End Sub
Tu remarqueras aussi que je n’aime pas le Like "coucou*" que j’ai remplacé par .StartWith("coucou") :p
Bon courage à tous
Et vive DotMSN 🙂
]]>petite question:
voici mon abonement AddHandler e.Conversation.Switchboard.TextMessageReceived, AddressOf Me.TextMessageReceived
et voici mon public sub
Public Sub TextMessageReceived(ByVal sender As Object, ByVal e As TextMessageEventArgs)
Debug.WriteLine(e.Sender.Mail & " send " & e.Message.Text)
Dim messenger As Conversation
If e.Message.Text.ToLower Like "coucou*" Then
Dim sMessage As New XihSolutions.DotMSN.TextMessage("Hello")
messenger.Switchboard.SendTextMessage(sMessage)
End If
End Sub
j’ai une erreur ici messenger.Switchboard.SendTextMessage(sMessage)
avez vous une idée, merci d’avance
]]>"The attempted operation is not supported for the type of object referenced"
une idee ?
]]> Et je fais appel à la méthode :
Conversation.Switchboard.SendEmoticonDefinitions(GetEmoticonsList());
juste avant :
Conversation.Switchboard.SendTextMessage(message);
dans la méthode SendInput().
Je pensais que cela marchait comme ca, mais lorsque j’envoie vers un client wlm, le texte s’affiche normalement, mais le raccourci n’est pas remplacé par l’image.
]]>As-tu réussi à envoyer des messages avec des emoticones personnalisées à partir de dotmsn ?
J’ai essayé avec l’exemple fourni dans la package mais sans succès.
Voici les méthodes que j’ai rajoutées/modifiées dans la classe conversationForm de l’exemple fourni avec dotmsn.
private ArrayList GetEmoticonsList()
{
ArrayList result = new ArrayList();
string FichierListeEmoticones = ConfigurationSettings.AppSettings.Get("FichierListeEmoticones");
if (!FichierListeEmoticones.Contains(Application.StartupPath))
{
FichierListeEmoticones = (Application.StartupPath + "\\" + FichierListeEmoticones);
}
if (File.Exists(FichierListeEmoticones))
{
TextReader oTextReader = new StreamReader(FichierListeEmoticones);
string entreeEmoticone = oTextReader.ReadLine();
while (entreeEmoticone != null)
{
string[] sTab_entreeEmoticone = entreeEmoticone.Split(new char[] { ‘|’ });
//Emoticon oEmoticon = new Emoticon("kyun", sTab_entreeEmoticone[1], sTab_entreeEmoticone[0]);
Emoticon oEmoticon = new Emoticon();
oEmoticon.Creator = Conversation.Messenger.Owner.Name;
oEmoticon.FileLocation = sTab_entreeEmoticone[1];
oEmoticon.Shortcut = sTab_entreeEmoticone[0];
oEmoticon.Image = Image.FromFile(sTab_entreeEmoticone[1]);
result.Add(oEmoticon);
entreeEmoticone = oTextReader.ReadLine();
}
oTextReader.Close();
}
return result;
}
private void SendInput()
{
// check whether there is input
if(inputTextBox.Text.Length == 0) return;
// if there is no switchboard available, request a new switchboard session
if(Conversation.SwitchboardProcessor.Connected == false)
{
Conversation.Messenger.Nameserver.RequestSwitchboard(Conversation.Switchboard, this);
}
// note: you can add some code here to catch the event where the remote contact lefts due to being idle too long
// in that case Conversation.Switchboard.Contacts.Count equals 0.
TextMessage message = new TextMessage(inputTextBox.Text);
/* You can optionally change the message’s font, charset, color here.
* For example:
* message.Color = Color.Red;
* message.Decorations = TextDecorations.Bold;
*/
ArrayList emoticonsList = GetEmoticonsList();
Conversation.Switchboard.SendEmoticonDefinitions(emoticonsList);
Conversation.Switchboard.SendTextMessage(message);
_typingMessageSended = false;
inputTextBox.Text = "";
conversationTextBox.Text += "You say: " + message.Text + " ";
}
Voilà, si tu peux m’aider ce serait cool.
Merci 🙂
]]>Tu peux facilement récupérer la taille des données transférées dans ton DataStream pour en déduire le pourcentage d’avancement, la vitesse, etc… Bon courage 😉
Concernant mon code, il y a plus simple pour éviter d’ attendre la fin du transfert pour enregistrer le fichier transfert en dur dans un fichier par la ligne :
e.TransferSession.DataStream = new FileStream(<filename>, FileMode.Create, FileAccess.Write);
.. au niveau de l’invitation du transfert du fichier 🙂
]]>Je pense qu’il faux faire ca nous meme.
Merci!
]]> Pour le transfert de fichier, il te suffit de t’abonner à l’évènement TransferInvitationReceived de l’objet Messenger pour recevoir les invitations de transfert. Exemple avant ma methode "Connect" :
objMessenger.TransferInvitationReceived += new MSNSLPInvitationReceivedEventHandler(objMessenger_TransferInvitationReceived);
Réponse à l’évènement tu pourra récupérer des infos sur le fichier à transférer comme sa taille (e.FilzSize), son nom (e.FileName), etc….
Toi, ce qu’il te faut pour démarrer le transfert :
* Accepter le transfert (e.Accept = true;)
* Demarrer le transfert en connexion direct ou indirect (indirect: e.TransferSession.StartDataTransfer(false);)
* T’abonner à l’evenement TransferFinished ( e.TransferSession.TransferFinished);)
En gros, une fonction de cette forme :
void objMessenger_TransferInvitationReceived(object sender, MSNSLPInvitationEventArgs e)
{
e.Accept = true;
e.TransferSession.StartDataTransfer(false);
e.TransferSession.TransferFinished += new EventHandler(TransferSession_TransferFinished);
}
Enfin, il faut bien sur faire la fonction en réponse à l’évènement TransferFinished pour enregistrer en dur dans le fichier, le contenu du fichier transféré qui se trouve dans la propriété DataStream de l’objet P2PTransferSession que tu cast en MemoryStream pour l’enregistrer.
Exemple :
void TransferSession_TransferFinished(object sender, EventArgs e)
{
try
{
FileStream stream = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.Read);
MemoryStream ms = (MemoryStream)((P2PTransferSession)sender).DataStream;
stream.Write(ms.GetBuffer(), 0, (int)ms.Position);
stream.Close();
}
catch (Exception ex) { //….. }
}
Bon courage à toi 🙂
]]>Ecris moi ci vous aver d’information… merci!
draekz at gmail.com
]]>