Esempio n. 1
0
        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 );
        }
Esempio n. 2
0
        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);
                }
            }
        }