示例#1
0
    /// <summary>
    /// 发送到GameServer
    /// </summary>
    public void SendToGameServer(C2S_HEADER proto)
    {
        // 握手失败,不需要发消息
        if (!m_Handshake)
        {
            return;
        }

        m_PlayerToGSProto.byProtocol = (byte)KC2G_Protocol.c2g_player_to_gs;
        m_SendToGameServerWriter.Seek(HEADER_LENGTH, SeekOrigin.Begin);
        proto.Pack(m_SendToGameServerWriter);
        m_PlayerToGSProto._dataLength_ = (int)m_SendToGameServerWriter.Seek(0, SeekOrigin.Current);
        m_SendToGameServerWriter.Seek(0, SeekOrigin.Begin);
        m_SendToGameServerWriter.Write((ushort)(m_PlayerToGSProto._dataLength_ - HEADER_LENGTH));
        m_SendToGameServerWriter.Flush();
        m_PlayerToGSProto.data = (m_SendToGameServerWriter.BaseStream as MemoryStream).GetBuffer();

        #region 可能是加密、验证
        m_PlayerToGSProto.uSign  = m_MessageTokenHash * m_MessageIndex * m_MessageToken[(int)(m_MessageIndex % m_MessageToken.Length)] * 47987731;
        m_PlayerToGSProto.uSign |= m_MessageToken[(int)((m_MessageIndex) % m_MessageToken.Length)];

        if (!string.IsNullOrEmpty(m_MessageToken))
        {
            int index = 0;
            for (int iData = sizeof(ushort); iData < m_PlayerToGSProto._dataLength_; iData++)
            {
                m_PlayerToGSProto.data[iData] = (byte)(m_PlayerToGSProto.data[iData] ^ m_MessageToken[index++ % m_MessageToken.Length]);
            }
        }

        m_MessageIndex++;
        m_MessageIndex += m_MessageToken[(int)(m_MessageIndex % m_MessageToken.Length)];
        #endregion

        LogDetail("Send to GameServer", proto, proto.protocolID, ((KC2S_Protocol)proto.protocolID).ToString(), m_PlayerToGSProto._dataLength_);

        SendToGatewayServer(m_PlayerToGSProto);
    }
示例#2
0
 /// <summary>
 /// 发送协议 TODO:网络层重构
 /// </summary>
 /// <param name="msg"></param>
 protected void SendToGameServer(C2S_HEADER msg)
 {
     NetworkManager.Instance.SendToGameServer(msg);
 }
示例#3
0
 protected void SendMessage(C2S_HEADER buf)
 {
     gameSocket.SendMessage(buf);
 }
示例#4
0
 public void SendMessage(C2S_HEADER buf)
 {
     gameSocket.SendMessage(buf);
 }