예제 #1
0
        protected bool CreateAndWriteRequest <TRequest>(
            NetDataWriter writer,
            ushort requestType,
            TRequest request,
            SerializerDelegate extraRequestSerializer,
            long duration,
            ResponseDelegate responseDelegate)
            where TRequest : INetSerializable
        {
            if (!responseHandlers.ContainsKey(requestType))
            {
                Logging.LogError($"Cannot create request. Request type: {requestType} not registered.");
                return(false);
            }
            if (!responseHandlers[requestType].IsRequestTypeValid(typeof(TRequest)))
            {
                Logging.LogError($"Cannot create request. Request type: {requestType}, {typeof(TRequest)} is not valid message type.");
                return(false);
            }
            // Create request
            uint ackId = CreateRequest(responseHandlers[requestType], duration, responseDelegate);

            // Write request
            writer.Reset();
            writer.PutPackedUShort(RequestMessageType);
            writer.PutPackedUShort(requestType);
            writer.PutPackedUInt(ackId);
            request.Serialize(writer);
            if (extraRequestSerializer != null)
            {
                extraRequestSerializer.Invoke(writer);
            }
            return(true);
        }
 public static void WritePacket(
     NetDataWriter writer,
     ushort messageType,
     SerializerDelegate extraSerializer)
 {
     WritePacket(writer, messageType);
     if (extraSerializer != null)
     {
         extraSerializer.Invoke(writer);
     }
 }
 public void ServerSendPacket <T>(long connectionId, DeliveryMethod deliveryMethod, ushort msgType, T messageData, SerializerDelegate extraSerializer = null) where T : INetSerializable
 {
     ServerSendPacket(connectionId, deliveryMethod, msgType, (writer) =>
     {
         messageData.Serialize(writer);
         if (extraSerializer != null)
         {
             extraSerializer.Invoke(writer);
         }
     });
 }
 public void ClientSendPacket <T>(DeliveryMethod options, ushort msgType, T messageData, SerializerDelegate extraSerializer = null) where T : INetSerializable
 {
     ClientSendPacket(options, msgType, (writer) =>
     {
         messageData.Serialize(writer);
         if (extraSerializer != null)
         {
             extraSerializer.Invoke(writer);
         }
     });
 }
 public void ServerSendPacketToAllConnections <T>(byte dataChannel, DeliveryMethod deliveryMethod, ushort msgType, T messageData, SerializerDelegate extraSerializer = null) where T : INetSerializable
 {
     Server.SendPacketToAllConnections(dataChannel, deliveryMethod, msgType, (writer) =>
     {
         messageData.Serialize(writer);
         if (extraSerializer != null)
         {
             extraSerializer.Invoke(writer);
         }
     });
 }
예제 #6
0
 protected void WritePacket(
     NetDataWriter writer,
     ushort messageType,
     SerializerDelegate extraSerializer)
 {
     writer.Reset();
     writer.PutPackedUShort(messageType);
     if (extraSerializer != null)
     {
         extraSerializer.Invoke(writer);
     }
 }
 private void RequestProceeded(long connectionId, uint requestId, AckResponseCode responseCode, INetSerializable response, SerializerDelegate responseSerializer)
 {
     // Write response
     Writer.Reset();
     Writer.PutPackedUShort(ResponseMessageType);
     Writer.PutPackedUInt(requestId);
     Writer.PutValue(responseCode);
     Writer.Put(response);
     if (responseSerializer != null)
     {
         responseSerializer.Invoke(Writer);
     }
     // Send response
     SendMessage(connectionId, 0, DeliveryMethod.ReliableUnordered, Writer);
 }
        protected bool CreateAndWriteRequest <TRequest>(
            NetDataWriter writer,
            ushort requestType,
            TRequest request,
            ResponseDelegate <INetSerializable> responseDelegate,
            int millisecondsTimeout,
            SerializerDelegate extraRequestSerializer)
            where TRequest : INetSerializable, new()
        {
            if (!responseHandlers.ContainsKey(requestType))
            {
                responseDelegate.Invoke(new ResponseHandlerData(nextRequestId++, this, -1, null), AckResponseCode.Unimplemented, EmptyMessage.Value);
                Logging.LogError($"Cannot create request. Request type: {requestType} not registered.");
                return(false);
            }
            if (!responseHandlers[requestType].IsRequestTypeValid(typeof(TRequest)))
            {
                responseDelegate.Invoke(new ResponseHandlerData(nextRequestId++, this, -1, null), AckResponseCode.Unimplemented, EmptyMessage.Value);
                Logging.LogError($"Cannot create request. Request type: {requestType}, {typeof(TRequest)} is not valid message type.");
                return(false);
            }
            // Create request
            uint requestId = CreateRequest(responseHandlers[requestType], responseDelegate, millisecondsTimeout);

            // Write request
            writer.Reset();
            writer.PutPackedUShort(RequestMessageType);
            writer.PutPackedUShort(requestType);
            writer.PutPackedUInt(requestId);
            writer.Put(request);
            if (extraRequestSerializer != null)
            {
                extraRequestSerializer.Invoke(writer);
            }
            return(true);
        }