private void SendHeaders(Socket socket, Header h, Subheader sh) { PacketWriter pw = new PacketWriter(); pw.WriteInt((int)h); pw.WriteInt((int)sh); SendCustom(socket, pw.GetBytes(BUFFER_LENGTH)); }
public void SendWait(Header h, Subheader sh, WriteCustom wc) { PacketWriter pw = new PacketWriter(); pw.Write((byte)h); pw.Write((byte)sh); if (wc != null) { wc.Invoke(pw); } Send(pw.GetBytes(BUFFER_LENGTH)); }
private void SendCustom(Header h, Subheader sh, WriteCustom wc) { PacketWriter pw = new PacketWriter(); pw.WriteInt((int)h); pw.WriteInt((int)sh); if (wc != null) { wc.Invoke(pw); } Send(pw.GetBytes(BUFFER_LENGTH)); }
private void SendError(Socket socket, Subheader sh, ErrorDelegate del) { PacketWriter pw = new PacketWriter(); pw.WriteInt((int)Header.Error); pw.WriteInt((int)sh); if (del != null) { del.Invoke(pw); } SendCustom(socket, pw.GetBytes(BUFFER_LENGTH)); }
public void PacketHandler(Socket socket, PacketReader pr) // Reads first byte of packet { int hcode = pr.ReadInt32(); int shcode = pr.ReadInt32(); Console.WriteLine($"{Enum.GetName(typeof(Header), hcode)}, {Enum.GetName(typeof(Subheader), shcode)}"); Header h = (Header)hcode; Subheader sh = (Subheader)shcode; switch (h) { case Header.Account: Account(socket, sh, pr); break; case Header.Friend: Friends(socket, sh, pr); break; case Header.Message: Message(socket, sh, pr); break; case Header.NetCode: NetCode(socket, sh, pr); break; case Header.Application: Application(socket, sh, pr); break; case Header.Admin: Admin(socket, sh, pr); break; case Header.Error: Error(socket, sh, pr); break; default: // Invalid Header Dispose(socket); Console.WriteLine("Packet disposal: " + (int)h); //SendError(socket, Subheader.INVALIDREQ, null); break; } // After packet is handled if (socket.Connected) { State cs = new State(BUFFER_LENGTH, socket); cs.socket.BeginReceive(cs.tempBuffer, 0, BUFFER_LENGTH, SocketFlags.None, new AsyncCallback(Recieve), cs); } }
public void SendAuthCustom(Header h, Subheader sh, UserInformation i, UsernameList l, WriteCustom wc) { PacketWriter pw = new PacketWriter(); pw.WriteInt((int)h); pw.WriteInt((int)sh); pw.WriteObject(i); pw.WriteObject(l); if (wc != null) { wc.Invoke(pw); } Send(pw.GetBytes(BUFFER_LENGTH)); }
private void ApplicationHandler(Subheader sh, PacketReader pr) { switch (sh) { case Subheader.PING: Console.WriteLine(EndTimer() + " ms"); break; default: Console.WriteLine("Application error - " + (int)sh); //SendError(Header.Error, Subheader.INVALIDREQ, null); break; } }
private void AccountHandler(Subheader sh, PacketReader pr) { switch (sh) { case Subheader.USERINFO: var user = pr.ReadObject <UserInformation>(); Console.WriteLine("Successful login, " + user.username + "!"); break; default: Console.WriteLine("Invalid Account Subheader"); break; } }
private void Application(Socket socket, Subheader sh, PacketReader pr) { ServerUserInformation sentUser = FindUser(pr.ReadObject <SessionInformation>()); switch (sh) { case Subheader.ADDUSR: if (DatabaseQuery.AddFriend(sentUser, pr.ReadObject <UserInformation>()) != Subheader.NULL) { SendError(socket, sh, null); } break; case Subheader.REMOVEUSR: case Subheader.DEC_REQ: if (DatabaseQuery.RemoveFriend(sentUser, pr.ReadObject <FriendInformation>()) != Subheader.NULL) { SendError(socket, sh, null); } break; case Subheader.BLOCKUSR: case Subheader.ACC_REQ: if (DatabaseQuery.UpdateFriendRequest(sentUser, pr.ReadObject <FriendInformation>()) != Subheader.NULL) { SendError(socket, sh, null); } break; case Subheader.VIEWFRIENDS: if (DatabaseQuery.ViewFriends(sentUser) != Subheader.NULL) { SendError(socket, sh, null); } break; case Subheader.PING: SendHeaders(socket, Header.Application, sh); break; default: // Invalid Subheader Dispose(socket); Console.WriteLine("Application disposal: " + (int)sh); //SendError(socket, Subheader.INVALIDREQ, null); break; } }
private void Message(Socket socket, Subheader sh, PacketReader pr) { //Header h = Header.Message; SessionInformation session = pr.ReadObject <SessionInformation>(); // Reads Session Information from User Identity ServerUserInformation sUsers = FindUser(session); // if (!UserExist(session)) { SendError(socket, Subheader.SESSIONLOST, null); return; } var users = UsernameList.Deserialize(ref pr); switch (sh) { case Subheader.TEXTMSG: // (Header,Subheader,SessionInformation,UsernameList,String) var text = pr.ReadString(); Console.WriteLine(text); //Redirect(users, (user) => {RedirectPacket(h, sh, socket, sUsers.username, user, text); }); break; /* * case Subheader.IMGMSG: // (Header,Subheader,SessionInformation,UsernameList,Image) * var img = pr.ReadImage(); * Redirect(users, (user) => { * RedirectPacket(h, sh, socket, sUsers.username, user, img); }); * break; * * case Subheader.FILEMSG: // (Header,Subheader,SessionInformation,UsernameList,File) * var file = pr.ReadObject<File>(); * Redirect(users, (user) => { * RedirectPacket(h, sh, socket, sUsers.username, user, file); * }); * break; */ default: // Invalid Subheader //Console.Write((int)sh); Dispose(socket); Console.WriteLine("Message disposal"); SendError(socket, sh, (pw) => { pw.Write("server - Error with sending test message"); }); break; } }
private void HandlePacket(byte[] buffer) { PacketReader pr = new PacketReader(buffer); Header h = (Header)pr.ReadInt32(); Subheader sh = (Subheader)pr.ReadInt32(); Console.WriteLine($" {(int)h} - {(int)sh}"); switch (h) { case Header.Account: AccountHandler(sh, pr); break; case Header.NetCode: NetCodeHandler(sh, pr); break; case Header.Message: MessageHandler(sh, pr); break; case Header.Application: ApplicationHandler(sh, pr); break; case Header.Friend: FriendHandler(sh, pr); break; case Header.Error: ErrorHandler(sh, pr); break; case Header.Undefined: Console.WriteLine("6"); //Ignore break; default: Console.WriteLine("Invalid header"); SendError(Header.Error, Subheader.INVALIDREQ, null); break; } }
private void Admin(Socket socket, Subheader sh, PacketReader pr) { ServerUserInformation sentUser = FindUser(pr.ReadObject <SessionInformation>()); switch (sh) { case Subheader.GETNUMCLIENTS: Console.WriteLine(clients.Count + " clients"); break; case Subheader.GETUPTIME: Console.WriteLine(serverTimer.ElapsedMilliseconds + " uptime"); break; default: // Invalid Subheader Dispose(socket); Console.WriteLine("Admin disposal"); //SendError(socket, Subheader.INVALIDREQ, null); break; } }
private void ErrorHandler(Subheader sh, PacketReader pr) { throw new NotImplementedException(); }
private void Account(Socket socket, Subheader sh, PacketReader pr) { ServerUserInformation usrInfo = new ServerUserInformation(); UserInformation info; switch (sh) { case Subheader.LOGIN: info = pr.ReadObject <UserInformation>(); sh = DatabaseQuery.Login(ref info, ref usrInfo); UpdateClientInfo(usrInfo); if (sh != Subheader.NULL) { SendError(socket, sh, null); } else { SendUserInfo(socket, info); } break; case Subheader.REGISTER: info = pr.ReadObject <UserInformation>(); sh = DatabaseQuery.Register(ref info, ref usrInfo); UpdateClientInfo(usrInfo); if (sh != Subheader.NULL) { SendError(socket, sh, null); } else { SendUserInfo(socket, info); } break; case Subheader.USERNAME: sh = DatabaseQuery.UserExists(pr.ReadString()); if (sh != Subheader.NULL) { SendError(socket, sh, null); } else { SendHeaders(socket, Header.Account, Subheader.USERNAME); } break; case Subheader.CHANGEPASS: info = pr.ReadObject <UserInformation>(); sh = DatabaseQuery.ChangePassword(ref info, ref usrInfo); UpdateClientInfo(usrInfo); if (sh != Subheader.NULL) { SendError(socket, sh, null); } else { SendUserInfo(socket, info); } break; default: // Invalid Subheader SendError(socket, Subheader.INVALIDREQ, null); break; } }
private void NetCode(Socket socket, Subheader sh, PacketReader pr) { throw new NotImplementedException(); }
private void Error(Socket socket, Subheader sh, PacketReader pr) { Console.WriteLine("Error name: " + Enum.GetName(typeof(Subheader), sh) + "\n\tError Code " + (int)sh); }