本文整理匯總了C#中System.ByteBuffer.PutChar方法的典型用法代碼示例。如果您正苦於以下問題:C# ByteBuffer.PutChar方法的具體用法?C# ByteBuffer.PutChar怎麽用?C# ByteBuffer.PutChar使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類System.ByteBuffer
的用法示例。
在下文中一共展示了ByteBuffer.PutChar方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: PutBody
protected override void PutBody(ByteBuffer buf)
{
// 初始密鑰
//buf.Put(user.QQKey.InitKey);
buf.PutChar((char)user.QQKey.LoginInfo_Magic_Token.Length);
buf.Put(user.QQKey.LoginInfo_Magic_Token);
ByteBuffer DecodedBuf = new ByteBuffer();
DecodedBuf.PutChar((char)0x0101);
DecodedBuf.PutChar((char)0x0000);
DecodedBuf.Put((byte)Client.QQUser.QQKey.LoginInfo_Token.Length);
DecodedBuf.Put(Client.QQUser.QQKey.LoginInfo_Token);
DecodedBuf.Put(new byte[]{0x10,0x03,0xC8,0xEC,0xC8,0x96,
0x8B,0xF2,0xB3,0x6B,0x4D,0x0C,0x5C,0xE0,0x6A,0x51,0xCE});//unknown data
//Client.QQUser.QQKey.Key = Client.QQUser.QQKey.LoginInfo_Key1;//可能要用到
byte[] EncodedBuf = crypter.Encrypt(DecodedBuf.ToByteArray(), user.QQKey.LoginInfo_Key1);
#if DEBUG
Client.LogManager.Log(ToString() + " key:" + Utils.Util.ToHex(user.QQKey.LoginInfo_Key1));
Client.LogManager.Log(ToString() + " UnBody:" + Utils.Util.ToHex(DecodedBuf.ToByteArray()));
#endif
buf.Put(EncodedBuf);
#if DEBUG
Client.LogManager.Log(ToString() + " EnBody:" + Utils.Util.ToHex(buf.ToByteArray()));
#endif
}
示例2: PutBody
protected override void PutBody(ByteBuffer buf)
{
// 初始密鑰
buf.PutChar((char)user.QQKey.LoginInfo_Magic_Token.Length);
buf.Put(user.QQKey.LoginInfo_Magic_Token);
ByteBuffer DecodedBuf = new ByteBuffer();
DecodedBuf.PutChar((char)0x010D);
DecodedBuf.Put(0x00);
DecodedBuf.Put(new byte[] { 0x01, 0x01 });
DecodedBuf.Put(VersionData.QQ09_LOCALE);
DecodedBuf.Put(VersionData.QQ09_VERSION_SPEC);
DecodedBuf.PutChar((char)Client.QQUser.QQKey.Answer_Token.Length);
DecodedBuf.Put(Client.QQUser.QQKey.Answer_Token);
DecodedBuf.PutChar((char)Client.QQUser.QQKey.LoginInfo_Token.Length);
DecodedBuf.Put(Client.QQUser.QQKey.LoginInfo_Token);
DecodedBuf.Put(Client.QQUser.QQKey.LoginInfo_UnknowData);
DecodedBuf.Put(Client.ServerTime);
DecodedBuf.PutChar((char)Client.QQUser.QQKey.LoginInfo_Data_Token.Length);
DecodedBuf.Put(Client.QQUser.QQKey.LoginInfo_Data_Token);
DecodedBuf.PutChar((char)0x0000);
DecodedBuf.PutInt(0x00000000);
//Client.QQUser.QQKey.Key = Client.QQUser.QQKey.LoginInfo_Key1;//可能要用到
byte[] EncodedBuf = crypter.Encrypt(DecodedBuf.ToByteArray(), user.QQKey.LoginInfo_Key1);
buf.Put(EncodedBuf);
#if DEBUG
Client.LogManager.Log(ToString() + " key:" + Utils.Util.ToHex(user.QQKey.InitKey));
Client.LogManager.Log(ToString() + " UnBody: " + Utils.Util.ToHex(DecodedBuf.ToByteArray()));
#endif
}
示例3: PutBody
protected override void PutBody(ByteBuffer buf)
{
buf.PutChar((char)Client.QQUser.QQKey.LoginInfo_Magic_Token.Length);
buf.Put(user.QQKey.LoginInfo_Magic_Token);
ByteBuffer DecodedBuf = new ByteBuffer();
DecodedBuf.PutChar((char)0x011A);
DecodedBuf.PutChar((char)0x0001);
DecodedBuf.Put(VersionData.QQ09_LOCALE);
DecodedBuf.Put(VersionData.QQ09_VERSION_SPEC);
DecodedBuf.Put((byte)0x00);
DecodedBuf.Put((byte)Client.QQUser.QQKey.Answer_Token.Length);
DecodedBuf.Put(Client.QQUser.QQKey.Answer_Token);
DecodedBuf.Put(Client.QQUser.QQKey.LoginInfo_UnknowData2);
DecodedBuf.Put(Client.ServerTime);
DecodedBuf.Put(Client.ClientIP);
DecodedBuf.Position += 4;//00 00 00 00
DecodedBuf.PutChar((char)Client.QQUser.QQKey.LoginInfo_Large_Token.Length);
DecodedBuf.Put(Client.QQUser.QQKey.LoginInfo_Large_Token);
DecodedBuf.PutUShort(this.Pos);
DecodedBuf.Position += 2;// 00 00
DecodedBuf.PutChar((char)0x0071);
DecodedBuf.Position += 0x0070;//0x0071 zeros
DecodedBuf.Put(0x00);
byte[] EncodedBuf = crypter.Encrypt(DecodedBuf.ToByteArray(), user.QQKey.LoginInfo_Key1);
#if DEBUG
Client.LogManager.Log(ToString() + " QQKey.LoginInfo_Key1:" + Utils.Util.ToHex(user.QQKey.LoginInfo_Key1));
Client.LogManager.Log(ToString() + " pos:"+this.Pos+" UnBody:" + Utils.Util.ToHex(DecodedBuf.ToByteArray()));
#endif
buf.Put(EncodedBuf);
#if DEBUG
Client.LogManager.Log(ToString() + " EnBody:" + Utils.Util.ToHex(buf.ToByteArray()));
#endif
}
示例4: PutBody
protected override void PutBody(ByteBuffer buf)
{
buf.Put((byte)SubCommand);
buf.PutInt(ClusterId);
buf.PutChar((char)Organizations.Count);
foreach (QQOrganization org in Organizations)
{
buf.Put((byte)org.Id);
buf.PutInt(org.Path);
byte[] nameBytes = Utils.Util.GetBytes(org.Name);
buf.Put((byte)nameBytes.Length);
buf.Put(nameBytes);
}
}
示例5: InitConnectionCanceled
/// <summary>
/// 初始化取消發送文件包
/// </summary>
/// <param name="buf">The buf.</param>
private void InitConnectionCanceled(ByteBuffer buf)
{
// 17 - 19. 懷疑也和發送消息包相同,但是在這種情況中,這部分沒有使用,為全0,一共11個0字節
buf.PutLong(0);
buf.PutChar((char)0);
buf.Put((byte)0);
// 傳輸類型
buf.Put((byte)TransferType);
}
示例6: PutBody
protected override void PutBody(ByteBuffer buf)
{
if (MessageId == 0)
{
MessageId = (ushort)this.Sequence;
}
// 發送者QQ號
buf.PutInt(user.QQ);
// 接收者QQ號
//00 00 00 08 00 01 00 04 00 00 00 00 09SP1 changes
buf.PutInt(Receiver);
buf.PutInt(0x00000008);
buf.PutInt(0x00010004);
buf.PutInt(0x00000000);
// 發送者QQ版本
buf.PutChar(Source);
// 發送者QQ號
buf.PutInt(user.QQ);
// 接收者QQ號
buf.PutInt(Receiver);
// 文件傳輸會話密鑰
buf.Put(user.QQKey.SessionKey);
// 消息類型
buf.PutUShort((ushort)MessageType);
// 順序號
if (SessionId == 0)
buf.PutChar(Sequence);
else
buf.PutUShort(SessionId);
// 發送時間
int time = (int)(Utils.Util.GetTimeMillis(DateTime.Now) / 1000);
buf.PutInt(time);
// 發送者頭像
char face = (char)user.ContactInfo.Head;
buf.PutChar(face);
// 字體信息,設成1
buf.PutInt(1);
if (MessageType != NormalIMType.Vibration)
{
// 暫時為如來神掌做的設置
if (FakeIp)
buf.PutInt(0);
else
{
// 分片數
buf.Put((byte)TotalFragments);
// 分片序號
buf.Put((byte)FragmentSequence);
// 消息id
buf.PutUShort(MessageId);
}
}
// 判斷消息類型
switch (MessageType)
{
case NormalIMType.TEXT:
InitTextContent(buf);
break;
case NormalIMType.UDP_REQUEST:
InitSendFileContent(buf);
break;
case NormalIMType.ACCEPT_UDP_REQUEST:
InitSendFileAcceptContent(buf);
break;
case NormalIMType.REJECT_UDP_REQUEST:
case NormalIMType.REJECT_TCP_REQUEST:
InitSendFileRejectContent(buf);
break;
case NormalIMType.NOTIFY_IP:
InitNotifyFilePortUDP(buf);
break;
case NormalIMType.REQUEST_CANCELED:
InitConnectionCanceled(buf);
break;
case NormalIMType.ARE_YOU_BEHIND_FIREWALL:
InitPleaseConnectMe(buf);
break;
case NormalIMType.Vibration:
InitVibrationContent(buf);
break;
}
#if DEBUG
Client.LogManager.Log(ToString() + " " + Utils.Util.ToHex(buf.ToByteArray()));
#endif
}
示例7: PutBody
protected override void PutBody(ByteBuffer buf)
{
// 初始密鑰
buf.Put(user.QQKey.InitKey);
ByteBuffer DecodedBuf = new ByteBuffer();
DecodedBuf.Put(new byte[] { 0x00, 0x01 });
DecodedBuf.Put(VersionData.QQ09_LOCALE);
DecodedBuf.Put(VersionData.QQ09_VERSION_SPEC);
DecodedBuf.Put((byte)0x00);
DecodedBuf.Put((byte)Client.QQUser.QQKey.LoginRequestToken.Length);
DecodedBuf.Put(Client.QQUser.QQKey.LoginRequestToken);
if (GetCode != 0) DecodedBuf.Put(0x04);
else DecodedBuf.Put(0x03);//開頭寫成0x04了,結果後麵出現Token不一致了
DecodedBuf.Put(0x00);
DecodedBuf.Put(0x05);
DecodedBuf.PutInt(0);
DecodedBuf.Put((byte)Png_Data);
if (GetCode != 0x00 && Token != null)
{
DecodedBuf.Put(0x04);
DecodedBuf.PutInt(GetCode);
//answer token
DecodedBuf.PutChar((char)Token.Length);
DecodedBuf.Put(Token);
}
else if (Png_Data == 0x01 && Token != null)
{
//png token
DecodedBuf.PutChar((char)Token.Length);
DecodedBuf.Put(Token);
}
else
{
DecodedBuf.Put(0x00);
DecodedBuf.Put(0x00);
}
byte[] EncodedBuf = crypter.Encrypt(DecodedBuf.ToByteArray(), user.QQKey.InitKey);
buf.Put(EncodedBuf);
#if DEBUG
Client.LogManager.Log(ToString() + " Key:" + Utils.Util.ToHex(user.QQKey.InitKey));
Client.LogManager.Log(ToString() + " UnBody:" + Utils.Util.ToHex(DecodedBuf.ToByteArray()));
#endif
}
示例8: PutBody
protected override void PutBody(ByteBuffer buf)
{
// 初始密鑰
buf.PutChar((char)user.QQKey.LoginInfo_Magic_Token.Length);
buf.Put(user.QQKey.LoginInfo_Magic_Token);
ByteBuffer DecodedBuf = new ByteBuffer();
DecodedBuf.PutChar((char)0x0001);
DecodedBuf.Put(VersionData.QQ09_VERSION_SPEC);
DecodedBuf.Put(Client.QQUser.QQKey.LoginInfo_UnknowData2);
DecodedBuf.Put(Client.ServerTime);
DecodedBuf.Put(Client.ClientIP);
DecodedBuf.Position += 4;//00 00 00 00
DecodedBuf.PutChar((char)Client.QQUser.QQKey.LoginInfo_Large_Token.Length);
DecodedBuf.Put(Client.QQUser.QQKey.LoginInfo_Large_Token);
DecodedBuf.Position += 35;// 00 00 00......
DecodedBuf.Put(VersionData.QQ09_EXE_HASH);
DecodedBuf.Put((byte)Utils.Util.Random.Next());
DecodedBuf.Put((byte)Client.QQUser.LoginMode);
DecodedBuf.Put(unknown5);
ServerInfo si=Client.ServerInfo;
si.CSP_dwConnIP=Client.QQUser.ServerIp;
DecodedBuf.Put(0x00);
DecodedBuf.Put(si.GetBytes());
DecodedBuf.Put(VersionData.QQ09_LOCALE);
DecodedBuf.Position += 16;
DecodedBuf.PutUShort((ushort)Client.QQUser.QQKey.Answer_Token.Length);
DecodedBuf.Put(Client.QQUser.QQKey.Answer_Token);
DecodedBuf.PutInt(0x00000007);
DecodedBuf.PutInt(0x00000000);
DecodedBuf.PutInt(0x08041001);
DecodedBuf.PutInt(0x40);//length of the following --To comment
//DecodedBuf.Put(0x40);
DecodedBuf.Put(0x01);
DecodedBuf.PutInt(Utils.Util.Random.Next());
//DecodedBuf.PutInt(0x0741E9748);
DecodedBuf.PutChar((char)unknown6.Length);
DecodedBuf.Put(unknown6);
DecodedBuf.Put(unknown5);
DecodedBuf.Put(0x00);
DecodedBuf.Put(si.GetBytes());
DecodedBuf.Put(0x02);
DecodedBuf.PutInt(Utils.Util.Random.Next());
//DecodedBuf.PutInt(0x8BED382E);
DecodedBuf.PutChar((char)unknown7.Length);
DecodedBuf.Put(unknown7);
DecodedBuf.Position += 248;//all zeros
DecodedBuf.Put(0x00);
byte[] EncodedBuf = crypter.Encrypt(DecodedBuf.ToByteArray(), user.QQKey.LoginInfo_Key1);
#if DEBUG
Client.LogManager.Log(ToString() + " QQKey.LoginInfo_Key1:" + Utils.Util.ToHex(user.QQKey.LoginInfo_Key1));
Client.LogManager.Log(ToString() + " Uncoded Body:" + Utils.Util.ToHex(DecodedBuf.ToByteArray()));
#endif
buf.Put(EncodedBuf);
#if DEBUG
Client.LogManager.Log(ToString() + " Encoded Body:" + Utils.Util.ToHex(buf.ToByteArray()));
#endif
}
示例9: InitSendFileContent
/// <summary>
/// 初始化請求發送文件包的其餘部分
/// </summary>
/// <param name="buf">The buf.</param>
private void InitSendFileContent(ByteBuffer buf)
{
// 17 - 19. 懷疑也和發送消息包相同,但是在這種情況中,這部分沒有使用,為全0,一共11個0字節
buf.PutLong(0);
buf.PutChar((char)0);
buf.Put((byte)0);
// 我們先嘗試UDP方式
buf.Put((byte)TransferType);
buf.Put((byte)0x0);
if (FakeIp)
{
buf.PutInt(0);
buf.PutChar((char)0);
}
else
{
// 四個字節的發送者IP,這是外部IP
buf.Put(user.IP);
// 發送者端口
buf.PutChar((char)user.Port);
}
// 直接端口
buf.PutUShort(DirectPort);
buf.PutInt(0);
buf.PutChar((char)0);
buf.Put((byte)0x20);
buf.Put(DELIMIT);
buf.Put(Utils.Util.GetBytes(FileName));
buf.Put(DELIMIT);
buf.Put(Utils.Util.GetBytes(FileSize));
}
示例10: PutBody
protected override void PutBody(ByteBuffer buf)
{
// 群命令類型
buf.Put((byte)SubCommand);
// 群內部ID
buf.PutInt(ClusterId);
// 未知1字節
buf.Put((byte)Type);
// 認證類型
buf.Put((byte)AuthType);
// 2004群分類
buf.PutInt(OldCategory);
// 群分類,同學,朋友,之類的
buf.PutInt(Category);
// 群名稱長度和群名稱
byte[] b = Utils.Util.GetBytes(Name);
buf.Put((byte)(b.Length & 0xFF));
buf.Put(b);
// 未知的2字節
buf.PutChar((char)0);
// 群聲明長度和群聲明
b = Utils.Util.GetBytes(Notice);
buf.Put((byte)(b.Length & 0xFF));
buf.Put(b);
// 群描述長度和群描述
b = Utils.Util.GetBytes(Description);
buf.Put((byte)(b.Length & 0xFF));
buf.Put(b);
}
示例11: PutBody
protected override void PutBody(ByteBuffer buf)
{
// 初始密鑰
buf.Put(user.QQKey.InitKey);
#region 加密用戶身份數據
ByteBuffer verifyBuf = new ByteBuffer();
verifyBuf.PutInt(Utils.Util.Random.Next());//random??
verifyBuf.PutChar((char)0x0001);
verifyBuf.PutInt(Client.QQUser.QQ);
verifyBuf.Put(VersionData.QQ09_VERSION_SPEC);
verifyBuf.Put(0x00);
verifyBuf.PutChar((char)0x0001);
verifyBuf.Put(Client.QQUser.Password);
verifyBuf.Put(Client.ServerTime);
verifyBuf.Position += 13;//13個00
verifyBuf.Put(Client.ClientIP);
verifyBuf.PutInt(0);
verifyBuf.PutInt(0);
verifyBuf.PutChar((char)0x0010);
verifyBuf.Put(Client.QQUser.QQKey.Verify_Key1);
verifyBuf.Put(Client.QQUser.QQKey.Verify_Key2);
//加密
byte[] EncodeVerifyBuf = crypter.Encrypt(verifyBuf.ToByteArray(), user.QQKey.PasswordKey);
#if DEBUG
Client.LogManager.Log(ToString() + " User Data:" + Utils.Util.ToHex(verifyBuf.ToByteArray()));
Client.LogManager.Log(ToString() + " Key:" + Utils.Util.ToHex(user.QQKey.PasswordKey));
Client.LogManager.Log(ToString() + " User Data:" + "len " + EncodeVerifyBuf.Length.ToString("") + "<--" + Utils.Util.ToHex(EncodeVerifyBuf));
#endif
#endregion
ByteBuffer DecodedBuf = new ByteBuffer();
DecodedBuf.PutChar((char)0x00CA);
DecodedBuf.Put(new byte[] { 0x00, 0x01 });
DecodedBuf.Put(VersionData.QQ09_LOCALE);
DecodedBuf.Put(VersionData.QQ09_VERSION_SPEC);
DecodedBuf.Put((byte)0x00);
DecodedBuf.Put((byte)Client.QQUser.QQKey.Answer_Token.Length);
DecodedBuf.Put(Client.QQUser.QQKey.Answer_Token);
DecodedBuf.PutChar((char)EncodeVerifyBuf.Length);
DecodedBuf.Put(EncodeVerifyBuf);
DecodedBuf.PutChar((char)0x0000);
DecodedBuf.PutChar((char)0x018B);
DecodedBuf.Put(0x2E);//length of the following info
DecodedBuf.Put(0x01);
DecodedBuf.PutInt(Utils.Util.Random.Next());
DecodedBuf.PutChar((char)0x0010);
DecodedBuf.Put(new byte[]{0xE9,0xC4,0xD6,0x5C,0x4D,0x9D,
0xA0,0x17,0xE5,0x24,0x6B,0x55,0x57,0xD3,0xAB,0xF1});//unknow6
DecodedBuf.Put(0x02);
DecodedBuf.PutInt(Utils.Util.Random.Next());
DecodedBuf.PutChar((char)0x0010);
DecodedBuf.Put(new byte[]{0xCB,0x8D,0xA4,0xE2,0x61,0xC2,
0xDD,0x27,0x39,0xEC,0x8A,0xCA,0xA6,0x98,0xF8,0x9B});//unknow7
DecodedBuf.Position += 0x015B;//395 zeros? 348 -去後麵補的一位
DecodedBuf.Put(0x00);//否則後麵不補00
byte[] EncodedBuf = crypter.Encrypt(DecodedBuf.ToByteArray(), user.QQKey.InitKey);
buf.Put(EncodedBuf);
verifyBuf = null;
#if DEBUG
Client.LogManager.Log(ToString() + " Key:" + Utils.Util.ToHex(user.QQKey.InitKey));
Client.LogManager.Log(ToString() + " Uncode Body:" + Utils.Util.ToHex(DecodedBuf.ToByteArray()));
#endif
}
示例12: PutBody
/// <summary>
/// Puts the body.
/// </summary>
/// <param name="buf">The buf.</param>
protected override void PutBody(ByteBuffer buf)
{
// 命令類型
buf.Put((byte)SubCommand);
// 群內部ID
buf.PutInt(ClusterId);
// 後麵數據的長度,這個長度需要根據後麵的長度計算才能知道,
// 所以先占個位置
//int pos = buf.Position;
//buf.PutChar((char)0);
ByteBuffer MsgBuf = new ByteBuffer();
// 未知的2字節
MsgBuf.PutChar((char)1);
// 分片數
MsgBuf.Put((byte)TotalFragments);
// 分片序號
MsgBuf.Put((byte)FragmentSequence);
if (MessageId == 0)
{
MessageId = (ushort)this.Sequence;
}
// 消息id
MsgBuf.PutUShort(MessageId);
// 未知4字節
MsgBuf.PutInt(0);
// 以0結束的消息,首先我們要根據用戶設置的message,解析出一個網絡可發送的格式
// 這一步比較麻煩,暫時想不到好的辦法
MsgBuf.PutInt(0x4D534700);//"MSG"
MsgBuf.PutInt(0);
// 發送時間
int time = (int)(Utils.Util.GetTimeMillis(DateTime.Now) / 1000);
MsgBuf.PutInt(time);
MsgBuf.PutInt((MessageId << 16) | MessageId);//maybe a random interger
MsgBuf.PutInt(0);
MsgBuf.PutInt(0x09008600);
byte[] Font_Name = Utils.Util.GetBytes(FontStyle.FontName);
MsgBuf.PutUShort((ushort)Font_Name.Length);
MsgBuf.Put(Font_Name);
MsgBuf.PutUShort(0);
MsgBuf.Put(0x01);
MsgBuf.PutUShort((ushort)(MessageBytes.Length + 3));
MsgBuf.Put(1);
MsgBuf.PutUShort((ushort)(MessageBytes.Length));
// 寫入消息正文字節數組
if (MessageBytes != null)
MsgBuf.Put(MessageBytes);
//if (FragmentSequence == TotalFragments - 1)
//{
// MsgBuf.Put((byte)0x20);
//}
byte[] MsgData = MsgBuf.ToByteArray();
buf.PutUShort((ushort)MsgData.Length);
buf.Put(MsgData);
MsgData = null;
MsgBuf = null;
//byte[] msgBytes = null;
//int j, i = 0;
//while ((j = Message.IndexOf((char)FaceType.DEFAULT, i)) != -1)
//{
// string sub = Message.Substring(i, j);
// if (!sub.Equals(""))
// {
// msgBytes = Utils.Util.GetBytes(sub);
// buf.Put(msgBytes);
// }
// buf.Put((byte)FaceType.DEFAULT);
// buf.Put((byte)(Message[j + 1] & 0xFF));
// i = j + 2;
//}
//if (i < Message.Length)
//{
// string sub = Message.Substring(i);
// msgBytes = Utils.Util.GetBytes(sub);
// buf.Put(msgBytes);
//}
//// 隻有最後一個分片有空格和字體屬性
//if (FragmentSequence == TotalFragments - 1)
//{
// buf.Put((byte)0x20);
// FontStyle.Write(buf);
//}
// 寫入長度
//int cur = buf.Position;
//buf.Position = pos;
//buf.PutChar((char)(cur - pos - 2));
//buf.Position = cur;
#if DEBUG
Client.LogManager.Log(ToString() + " " + Utils.Util.ToHex(buf.ToByteArray()));
#endif
}
示例13: PutBody
protected override void PutBody(ByteBuffer buf)
{
// 命令類型
buf.Put((byte)SubCommand);
// 群類型
buf.Put((byte)Type);
// 父群ID
buf.PutInt(ParentClusterId);
// 群內部ID
buf.PutInt(ClusterId);
// 後麵數據的長度,這個長度需要根據消息長度和字體名稱長度計算才能知道,
// 所以先來產生消息和字體名稱字節數組,先占個位置
int pos = buf.Position;
buf.PutChar((char)0);
// 未知2字節
buf.PutChar((char)1);
// 分片數
buf.Put((byte)TotalFragments);
// 分片序號
buf.Put((byte)FragmentSequence);
// 消息id
buf.PutUShort(MessageId);
// 未知4字節
buf.PutInt(0);
// 以0結束的消息,首先我們要根據用戶設置的message,解析出一個網絡可發送的格式
// 這一步比較麻煩,暫時想不到好的辦法
byte[] msgBytes = null;
int j, i = 0;
while ((j = Message.IndexOf((char)FaceType.DEFAULT, i)) != -1)
{
String sub = Message.Substring(i, j);
if (!sub.Equals(""))
{
msgBytes = Utils.Util.GetBytes(sub);
buf.Put(msgBytes);
}
buf.Put((byte)FaceType.DEFAULT);
buf.Put((byte)(Message[j + 1] & 0xFF));
i = j + 2;
}
if (i < Message.Length)
{
String sub = Message.Substring(i);
msgBytes = Utils.Util.GetBytes(sub);
buf.Put(msgBytes);
}
// 隻有最後一個分片有空格和字體屬性
if (FragmentSequence == TotalFragments - 1)
{
buf.Put((byte)0x20);
FontStyle.Write(buf);
}
// 寫入長度
int cur = buf.Position;
buf.Position = pos;
buf.PutChar((char)(cur - pos - 2));
buf.Position = cur;
}
示例14: PutBody
protected override void PutBody(ByteBuffer buf)
{
// 群命令類型
buf.Put((byte)SubCommand);
// 群類型
buf.Put((byte)Type);
// 認證類型
buf.Put((byte)AuthType);
// 2004群分類
buf.PutInt(OldCategory);
// 群的分類
buf.PutInt(Category);
// 群名稱長度和群名稱
byte[] b = Utils.Util.GetBytes(Name);
buf.Put((byte)(b.Length & 0xFF));
buf.Put(b);
// 未知的2字節
buf.PutChar((char)0);
// 群聲明長度和群聲明
b = Utils.Util.GetBytes(Notice);
buf.Put((byte)(b.Length & 0xFF));
buf.Put(b);
// 群描述長度和群描述
b = Utils.Util.GetBytes(Description);
buf.Put((byte)(b.Length & 0xFF));
buf.Put(b);
// 群中的好友
foreach (int i in Members)
buf.PutInt(i);
}
示例15: InitNotifyFilePortUDP
/// <summary>
/// 初始化IP信息通知包
/// </summary>
/// <param name="buf">The buf.</param>
private void InitNotifyFilePortUDP(ByteBuffer buf)
{
// 17 - 19. 懷疑也和發送消息包相同,但是在這種情況中,這部分沒有使用,為全0,一共11個0字節
buf.PutLong(0);
buf.PutChar((char)0);
buf.Put((byte)0);
// 我們先嘗試UDP方式
buf.Put((byte)TransferType);
buf.Put((byte)0x0);
// 四個字節的發送者IP,這是外部IP
buf.Put(user.IP);
// 發送者端口
buf.PutChar((char)user.Port);
// 監聽端口,含義未知,為連接服務器的端口,先隨便寫一個值
buf.PutUShort(DirectPort);
// 真實IP和第二個端口
buf.Put(LocalIp);
buf.PutUShort(LocalPort);
}