示例#1
0
 // SUMMARY: Send model to server
 public void SendModel(SocketDistributionModel model)
 {
     try
     {
         byte[] data = SocketDistributionManager.GetBytesFromObj(model);
         ClientSocket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), ClientSocket);
     }
     catch (Exception e) { }
 }
 // Sending data
 protected async Task SendToAll(SocketDistributionModel model)
 {
     byte[] data = model.DataType == SocketDistributionModelDataType.JSON ? model.Data : SocketDistributionManager.GetBytesFromObj(model);
     foreach (var socket in _sockets)
     {
         if (socket.Value.State == WebSocketState.Open)
         {
             await socket.Value.SendAsync(new ArraySegment <byte>(data), model.WebSocketMessageType, true, default(CancellationToken));
         }
     }
 }
        protected async Task Send(string uid, SocketDistributionModel model)
        {
            if (_sockets.ContainsKey(uid))
            {
                return;
            }
            var socket = this[uid];

            byte[] data = model.DataType == SocketDistributionModelDataType.JSON ? model.Data : SocketDistributionManager.GetBytesFromObj(model);
            if (socket.State == WebSocketState.Open)
            {
                await this[uid]?.SendAsync(data, model.WebSocketMessageType, true, default(CancellationToken));
            }
        }
示例#4
0
        protected override void OnReceive(SocketDistributionModel data, Socket socket)
        {
            if (data.Type == SocketDistributionModelType.LOGIN)
            {
                this[socket].Identifier = data.Convert <SocketRegistrationModel>().Username;
                Console.WriteLine($"User '{this[socket].Identifier}' connected!");
                return;
            }

            SocketObject socketObj = this[socket];

            if (socketObj != null && data.Type == SocketDistributionModelType.DEFAULT)
            {
                OnReceiveFromClient(data, socketObj);
            }
        }
示例#5
0
        // SUMMARY: Send model to client
        public void SendModel(SocketDistributionModel model)
        {
            if (ClientSockets.Count == 0)
            {
                return;
            }

            lock (this.LockObj)
            {
                foreach (SocketObject socket in this.ClientSockets)
                {
                    try
                    {
                        byte[] data = SocketDistributionManager.GetBytesFromObj(model);
                        socket.Socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);
                    }
                    catch (Exception e) { }
                }
            }
        }
示例#6
0
        // SUMMARY: On receive message from client
        protected virtual void ReceiveCallback(IAsyncResult AR)
        {
            Socket socket = (Socket)AR.AsyncState;

            try
            {
                int    received = socket.EndReceive(AR);
                byte[] dataBuf  = new byte[received];
                Array.Copy(_buffer, dataBuf, received);

                SocketDistributionModel modelReceived = SocketDistributionManager.ConvertToModel(dataBuf);

                if (modelReceived != null)
                {
                    this.OnReceive(modelReceived, socket);
                }

                socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket);
            }
            catch (Exception e)
            {
                OnSocketFatalDisconection(e, socket);
            }
        }
示例#7
0
 public override void OnReceiveFromClient(SocketDistributionModel data, SocketObject socket)
 {
     throw new NotImplementedException();
 }
示例#8
0
 protected override void OnReceive(SocketDistributionModel data, Socket socket)
 {
 }
示例#9
0
 public Task Send(SocketDistributionModel model)
 {
     byte[] data = SocketDistributionManager.GetBytesFromObj(model);
     this.socket.Send(data);
     return(Task.FromResult(0));
 }
示例#10
0
 protected abstract void OnReceive(SocketDistributionModel data, Socket socket);
示例#11
0
 // ABSTRACT::
 public abstract void OnReceiveFromClient(SocketDistributionModel data, SocketObject socket);