Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- namespace ArcServer
- {
- public sealed class Client
- {
- public Socket mSocket;
- private bool isSize { get; set; }
- public byte[] buffer;
- public Server server { get; set; }
- public DateTime lastPing { get; set; }
- private User mUser;
- public Client(Socket pSocket, Server serv, User pUser)
- {
- mSocket = pSocket;
- isSize = true;
- mUser = pUser;
- server = serv;
- lastPing = DateTime.Now;
- if (!mSocket.Connected) return;
- mSocket.BeginReceive(buffer = new byte[4], 0, 4, SocketFlags.None, new AsyncCallback(ParseHeader), mSocket);
- }
- void fBeginReceive(int size)
- {
- buffer = new byte[size];
- mSocket.BeginReceive(buffer, 0, size, SocketFlags.None, new AsyncCallback(ParseHeader), null);
- }
- void ParseHeader(IAsyncResult ar)
- {
- try
- {
- int len = mSocket.EndReceive(ar);
- if (len < (isSize ? 4 : 2))
- {
- OnClose();
- return;
- }
- int nextReceiveLength = 4;
- if (isSize)
- {
- nextReceiveLength = BitConverter.ToInt32(buffer, 0);
- isSize = false;
- }
- else
- {
- Packet packet = new Packet(buffer);
- server.Handle(this, packet);
- isSize = true;
- }
- fBeginReceive(nextReceiveLength);
- }
- catch
- {
- OnClose();
- }
- }
- private void OnClose()
- {
- Log.Write(mSocket.RemoteEndPoint + " Disconnected from server!", msgType.Information);
- mSocket.Close();
- server.RemoveClient(mUser);
- }
- public void SendPacket(Packet packet)
- {
- byte[] data = packet.GetPacket();
- Console.WriteLine("TRying to send packet... Length {0}, Data: {1}", data.Length, data.ToReadableByteArray());
- try
- {
- mSocket.Send(data);
- }
- catch (Exception ex)
- {
- Log.Write("Error sending Packet: " + ex.Message, msgType.Exception);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement