public static SR_SendPrivateMessage ReadSendPrivateMessage(PacketReader reader) { var ret = new SR_SendPrivateMessage(); ret.Name = reader.ReadUTF8String(); ret.Message = reader.ReadUTF8String(); return ret; }
public static SR_Login ReadLogin(PacketReader reader) { var ret = new SR_Login(); ret.UserName = reader.ReadUTF8String(); ret.Pwd = reader.ReadUTF8String(); return ret; }
void OnCreatePlayer(NetState netstate, PacketReader reader){ if (!netstate.IsVerifyLogin) return; var p1 = reader.ReadUTF8String(); var p2 = (TradeAge.Server.Entity.Character.Sex)reader.ReadByte(); module.OnCreatePlayer(netstate,p1,p2); }
/// <summary> /// 收到Socket数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void OnSocketRecv(object sender, SocketRecvEventArgs<Session> e) { var session = e.Session.Data; session.RQ.Enqueue(e.Buffer.Bytes, 0, e.Buffer.Length); var packetlen = session.RQ.GetPacketLength(); if (packetlen > 1024*64) { session.Client.CloseSocket(); return; } while (packetlen >= session.RQ.Length) { var dogBuffer = new DogBuffer(); session.RQ.Dequeue(dogBuffer.Bytes, 0, packetlen); var reader = new PacketReader(); reader.SetBuffer(dogBuffer); var pid = (OpCode)reader.GetPacketID(); switch (pid) { case OpCode.Login: { var userName = reader.ReadUTF8String(); var pwd = reader.ReadUTF8String(); if (string.IsNullOrEmpty(userName)) { Logs.Error("连接的用户名是空"); session.Client.CloseSocket(); } if (pwd != "123") { Logs.Error("用户名 {0} 速度的密码错误", userName); var writer = new PacketWriter(); writer.SetNetCode((ushort) OpCode.LoginResult); writer.Write(1); // 0表示登录成功 1表示密码错误 session.Client.SendPackage(writer.GetBuffer()); return; } // 如果玩家之前登录过,则把之前的客户端踢下线 var exists = sessions.FirstOrDefault(o => o.Name == userName); if (exists != null) { exists.IsLogin = false; sessions.Remove(exists); exists.Client.CloseSocket(); } // 登录完成 session.IsLogin = true; nologinSessions.Remove(session); sessions.Add(session); session.Name = userName; session.Pwd = pwd; var writer2 = new PacketWriter(); writer2.SetNetCode((ushort) OpCode.LoginResult); writer2.Write(0); // 0表示登录成功 1表示密码错误 session.Client.SendPackage(writer2.GetBuffer()); } break; case OpCode.SendMessage: { var message = reader.ReadUTF8String(); if (string.IsNullOrEmpty(message)) { // 空消息 return; } // 广播给所有在线的用户 var writer = new PacketWriter(); writer.SetNetCode((ushort) OpCode.RecvMessage); foreach (var ss in sessions) { ss.Client.SendPackage(writer.GetBuffer()); } } break; case OpCode.SendPriviteMessage: { var userName = reader.ReadUTF8String(); var message = reader.ReadUTF8String(); if (message == null) return; var target = sessions.FirstOrDefault(o => o.Name == userName); if (target == null) return; var writer = new PacketWriter(); writer.SetNetCode((ushort) OpCode.RecvPrivateMessage); writer.WriteUTF8Null(session.Name); writer.WriteUTF8Null(message); target.Client.SendPackage(writer.GetBuffer()); } break; default: Logs.Error("未知消息ID {0}", (int) pid); break; } packetlen = session.RQ.GetPacketLength(); } }
void OnLoginServer(NetState netstate, PacketReader reader){ var p1 = reader.ReadUTF8String(); var p2 = reader.ReadUTF8String(); var p3 = reader.ReadInt32(); module.OnLoginServer(netstate,p1,p2,p3); }
/// <summary> /// 给聊天室里的某人单独发消息 /// </summary> /// <param name="session"></param> /// <param name="reader"></param> static void OnSendPrivateMessage(Session session, PacketReader reader) { var userName = reader.ReadUTF8String(); var message = reader.ReadUTF8String(); if (message == null) return; var target = sessions.FirstOrDefault(o => o.Name == userName); if (target == null) return; var writer = new PacketWriter(); writer.SetNetCode((ushort) OpCode.RecvPrivateMessage); writer.WriteUTF8Null(session.Name); writer.WriteUTF8Null(message); target.Client.SendPackage(writer.GetBuffer()); }
/// <summary> /// 给聊天室里的人都发消息 /// </summary> /// <param name="session"></param> /// <param name="reader"></param> static void OnSendMessage(Session session, PacketReader reader) { var message = reader.ReadUTF8String(); if (string.IsNullOrEmpty(message)) { // 空消息 return; } // 广播给所有在线的用户 var writer = new PacketWriter(); writer.SetNetCode((ushort)OpCode.RecvMessage); foreach (var ss in sessions) { ss.Client.SendPackage(writer.GetBuffer()); } }
/// <summary> /// 登录服务器 /// </summary> /// <param name="session"></param> /// <param name="reader"></param> static void OnLogin(Session session, PacketReader reader) { var userName = reader.ReadUTF8String(); var pwd = reader.ReadUTF8String(); if (string.IsNullOrEmpty(userName)) { Logs.Error("连接的用户名是空"); session.Client.CloseSocket(); } if (pwd != "123") { Logs.Error("用户名 {0} 速度的密码错误", userName); var writer = new PacketWriter(); writer.SetNetCode((ushort)OpCode.LoginResult); writer.Write(1); // 0表示登录成功 1表示密码错误 session.Client.SendPackage(writer.GetBuffer()); return; } // 如果玩家之前登录过,则把之前的客户端踢下线 var exists = sessions.FirstOrDefault(o => o.Name == userName); if (exists != null) { exists.IsLogin = false; sessions.Remove(exists); exists.Client.CloseSocket(); } // 登录完成 session.IsLogin = true; nologinSessions.Remove(session); sessions.Add(session); session.Name = userName; session.Pwd = pwd; session.BizId = clientIdSeq++; var writer2 = new PacketWriter(); writer2.SetNetCode((ushort)OpCode.LoginResult); writer2.Write(0); // 0表示登录成功 1表示密码错误 session.Client.SendPackage(writer2.GetBuffer()); }
/// <summary> /// 给聊天室里的某人单独发消息 /// </summary> /// <param name="session"></param> /// <param name="reader"></param> static void OnSendPrivateMessage(Session session, PacketReader reader) { var userName = reader.ReadUTF8String(); var message = reader.ReadUTF8String(); if (message == null) return; var target = sessions.FirstOrDefault(o => o.Name == userName); if (target == null) return; var buffer = MessagePackageManager.WriteSendPrivateMessageResult(session.Name, message); target.Client.SendPackage(buffer); }
/// <summary> /// 给聊天室里的人都发消息 /// </summary> /// <param name="session"></param> /// <param name="reader"></param> static void OnSendMessage(Session session, PacketReader reader) { var message = reader.ReadUTF8String(); if (string.IsNullOrEmpty(message)) { // 空消息 return; } // 广播给所有在线的用户 var buffer = MessagePackageManager.WriteSendMessageResult(message); foreach (var ss in sessions) { ss.Client.SendPackage(buffer); } }