Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.54 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Text;
  6.  
  7. namespace ArcServer
  8. {
  9.     public sealed class Client
  10.     {
  11.         public Socket mSocket;
  12.         private bool isSize { get; set; }
  13.         public byte[] buffer;
  14.         public Server server { get; set; }
  15.         public DateTime lastPing { get; set; }
  16.         private User mUser;
  17.  
  18.         public Client(Socket pSocket, Server serv, User pUser)
  19.         {
  20.             mSocket = pSocket;
  21.             isSize = true;
  22.             mUser = pUser;
  23.             server = serv;
  24.             lastPing = DateTime.Now;
  25.             if (!mSocket.Connected) return;
  26.             mSocket.BeginReceive(buffer = new byte[4], 0, 4, SocketFlags.None, new AsyncCallback(ParseHeader), mSocket);
  27.         }
  28.  
  29.         void fBeginReceive(int size)
  30.         {
  31.             buffer = new byte[size];
  32.             mSocket.BeginReceive(buffer, 0, size, SocketFlags.None, new AsyncCallback(ParseHeader), null);
  33.         }
  34.  
  35.         void ParseHeader(IAsyncResult ar)
  36.         {
  37.             try
  38.             {
  39.                 int len = mSocket.EndReceive(ar);
  40.                 if (len < (isSize ? 4 : 2))
  41.                 {
  42.                     OnClose();
  43.                     return;
  44.                 }
  45.                 int nextReceiveLength = 4;
  46.                 if (isSize)
  47.                 {
  48.                     nextReceiveLength = BitConverter.ToInt32(buffer, 0);
  49.                     isSize = false;
  50.                 }
  51.                 else
  52.                 {
  53.                     Packet packet = new Packet(buffer);
  54.                     server.Handle(this, packet);
  55.                     isSize = true;
  56.                 }
  57.                 fBeginReceive(nextReceiveLength);
  58.             }
  59.             catch
  60.             {
  61.                 OnClose();
  62.             }
  63.         }
  64.  
  65.         private void OnClose()
  66.         {
  67.             Log.Write(mSocket.RemoteEndPoint + " Disconnected from server!", msgType.Information);
  68.             mSocket.Close();
  69.             server.RemoveClient(mUser);
  70.         }
  71.  
  72.         public void SendPacket(Packet packet)
  73.         {
  74.             byte[] data = packet.GetPacket();
  75.             Console.WriteLine("TRying to send packet... Length {0}, Data: {1}", data.Length, data.ToReadableByteArray());
  76.             try
  77.             {
  78.                 mSocket.Send(data);
  79.             }
  80.             catch (Exception ex)
  81.             {
  82.                 Log.Write("Error sending Packet: " + ex.Message, msgType.Exception);
  83.             }
  84.         }
  85.  
  86.  
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement