void ChatMsg( FriendChatMsg_t chatMsg ) { byte[] msgData = new byte[ 1024 * 4 ]; EChatEntryType type = EChatEntryType.k_EChatEntryTypeChatMsg; CSteamID reciever = new CSteamID( chatMsg.m_ulReceiver ); int msgLength = steamFriends.GetChatMessage( chatMsg.m_ulReceiver, ( int )chatMsg.m_iChatID, msgData, msgData.Length, ref type ); if ( type == EChatEntryType.k_EChatEntryTypeTyping ) return; msgLength = Clamp( msgLength, 1, msgData.Length ); LogMessage log = new LogMessage(); log.Sender = new CSteamID( chatMsg.m_ulSender ); log.SenderName = steamFriends.GetFriendPersonaName( log.Sender ); log.Reciever = reciever; log.RecieverName = steamFriends.GetFriendPersonaName( log.Reciever ); log.Message = Encoding.UTF8.GetString( msgData, 0, msgLength ); log.Message = log.Message.Substring( 0, log.Message.Length - 1 ); log.MessageTime = DateTime.Now; log.MessageType = type; AddLog( log ); }
private void HandleCallback() { // cache for callback CallbackMsg_t callbackMsg = new CallbackMsg_t(); while (true) { // get callback if available bool callbackAvailable = Steamworks.GetCallback(m_Pipe, ref callbackMsg); if (callbackAvailable) { // process callback switch (callbackMsg.m_iCallback) { case 805: // convert to chat message callback FriendChatMsg_t chatMsg = (FriendChatMsg_t)Marshal.PtrToStructure(callbackMsg.m_pubParam, typeof(FriendChatMsg_t)); // setup buffers byte[] bMsg = new byte[1024]; EChatEntryType eChatEntryType = (EChatEntryType)0; // get chat message int len = m_SteamFriends002.GetChatMessage((CSteamID)chatMsg.m_ulSender, (int)chatMsg.m_iChatID, bMsg, ref eChatEntryType); // get sender CSteamID sender = (CSteamID)chatMsg.m_ulSender; if (len > 0 && eChatEntryType == EChatEntryType.k_EChatEntryTypeChatMsg) { // decode message (excluding null terminator) string msg = Encoding.UTF8.GetString(bMsg, 0, len - 1); if (msg == "PGPSTEAM_REQUEST_KEY") { // send public key SendKey(sender); break; } else if (msg.StartsWith("-----BEGIN PGP PUBLIC KEY BLOCK-----")) { // cache public key File.WriteAllText("key_cache/" + sender.AccountID.ToString() + ".key", msg); break; } if (m_ChatWindows.ContainsKey(sender)) { // decode msg = m_PGP.Decrypt(msg); // inject chat message m_ChatWindows[sender].Message(msg); } else { // check has key if (!HasPublicKey(sender)) { break; } // open chat window Chat(sender); // inject chat message if (m_ChatWindows.ContainsKey(sender)) { // decode msg = m_PGP.Decrypt(msg); // inject chat message m_ChatWindows[sender].Message(msg); } } } break; } // free callback Steamworks.FreeLastCallback(m_Pipe); } } }