示例#1
0
 /// <summary>
 /// Serialize <see cref="RequestInit"/>.
 /// </summary>
 /// <param name="request">Request to serialize</param>
 private void SerializeRequestBody(RequestInit request)
 {
     this.binaryWriter.Write((ulong)request.SessionId);
     this.binaryWriter.Write((string)request.SessionPwd);
     this.binaryWriter.Write((bool)request.ROInterfaceRequiresLocks);
     this.binaryWriter.Write((byte)request.Redirection);
 }
示例#2
0
        private void OnNewConnection(IConnection connection)
        {
            connection.OnPacketReceived = packet =>
            {
                Task.Run(async() =>
                {
                    RequestCall call = protocol.DeserializeRequest(packet, packet.Length, this.protocolVersion);
                    RequestResponse response;

                    switch (call.Request.RequestType)
                    {
                    case RingMasterRequestType.Init:
                        {
                            RequestInit initRequest = (RequestInit)call.Request;
                            response            = new RequestResponse();
                            response.Content    = new string[] { string.Empty + initRequest.SessionId, Guid.NewGuid().ToString() };
                            response.ResultCode = (int)RingMasterException.Code.Ok;
                            break;
                        }

                    default:
                        {
                            response = await this.requestHandler.Request(call.Request);
                            break;
                        }
                    }

                    response.CallId = call.CallId;
                    connection.Send(this.protocol.SerializeResponse(response, this.protocolVersion));
                });
            };

            connection.OnConnectionLost = () => { };
        }
示例#3
0
 public void selectedCard(bool isOpen, int index)
 {
     if (isOpen)
     {
         //유저카드선택
     }
     else
     {
         //필드카드선택
         if (!isInit)
         {
             RequestInit req = new RequestInit(roomNo);
             SocketManager.Instance().sendMessage(req);
             IndicatorManager.Instance().show("다른 유져의 선택을 기다립니다.");
         }
         else
         {
             //attack
             userListPanel.attackGuide.gameObject.SetActive(true);
         }
     }
 }
示例#4
0
        /// <summary>
        /// Initializes the connection with the server.
        /// </summary>
        /// <param name="connection">Connection to initialize</param>
        /// <param name="sessionId">Id of the session</param>
        /// <param name="sessionPassword">Session Password</param>
        /// <returns>Task that tracks completion of this method</returns>
        private async Task Init(
            IConnection connection,
            ulong sessionId,
            string sessionPassword)
        {
            RequestInit.RedirectionPolicy redirectionPolicy = this.configuration.MustTransparentlyForwardRequests
                ? RequestInit.RedirectionPolicy.ForwardPreferred
                : RequestInit.RedirectionPolicy.RedirectPreferred;

            var initRequest = new RequestInit(
                sessionId,
                sessionPassword,
                readOnlyInterfaceRequiresLocks: this.configuration.RequireLockForReadOnlyOperations,
                redirection: redirectionPolicy);

            var requestWrapper = this.RegisterRequest(initRequest);

            RingMasterClientEventSource.Log.Init(requestWrapper.CallId, sessionId, sessionPassword);
            await this.SendRequest(connection, requestWrapper);

            RequestResponse response = await requestWrapper.TaskCompletionSource.Task;

            ThrowIfError(response);
        }
示例#5
0
        /// <summary>
        /// Deserialize <see cref="IZooKeeperRequest"/>
        /// </summary>
        /// <param name="xid">the callid</param>
        /// <param name="type">type of the call</param>
        /// <param name="sessionState">The PerSession State</param>
        /// <param name="ringMasterRequest">The ring master request.</param>
        /// <exception cref="System.ArgumentException">unknown type  + type</exception>
        /// <returns>The Zookeeper Request</returns>
        private IZooKeeperRequest DeserializeZooKeeperRequest(int xid, ZooKeeperRequestType type, ZkprPerSessionState sessionState, out IRingMasterRequest ringMasterRequest)
        {
            ringMasterRequest = null;
            switch (type)
            {
            case ZooKeeperRequestType.Notification:     // "0" for Createing a session
                ringMasterRequest = null;
                return(this.DeserializeNotification(xid));

            case ZooKeeperRequestType.CreateSession:
                ZkprProtocolMessages.CreateSession cs = this.DeserializeCreateSession();
                ringMasterRequest            = new RequestInit((ulong)cs.SessionId, cs.IsNullPassword ? string.Empty : cs.Password);
                sessionState.ConnectRecieved = true;
                return(cs);

            case ZooKeeperRequestType.Exists:
                ZkprProtocolMessages.Exists ex = this.DeserializeExists(xid);
                ringMasterRequest = new RequestExists(ex.Path, ex.Watch == false ? null : new Watcher((ulong)xid, WatcherKind.OneUse));
                return(ex);

            case ZooKeeperRequestType.GetChildren:
                ZkprProtocolMessages.GetChildren gc = this.DeserializeGetChildren(xid);
                ringMasterRequest = new RequestGetChildren(gc.Path, gc.Watch == false ? null : new Watcher((ulong)xid, WatcherKind.OneUse), null);
                return(gc);

            case ZooKeeperRequestType.GetChildren2:
                ZkprProtocolMessages.GetChildren2 gc2 = this.DeserializeGetChildren2(xid);
                ringMasterRequest = new RequestGetChildren(gc2.Path, gc2.Watch == false ? null : new Watcher((ulong)xid, WatcherKind.OneUse), null);
                return(gc2);

            case ZooKeeperRequestType.GetData:
                ZkprProtocolMessages.GetData gd = this.DeserializeGetData(xid);
                ringMasterRequest = new RequestGetData(gd.Path, RequestGetData.GetDataOptions.None, gd.Watch == false ? null : new Watcher((ulong)xid, WatcherKind.OneUse));
                return(gd);

            case ZooKeeperRequestType.Create:
                ZkprProtocolMessages.Create cr   = this.DeserializeCreate(xid);
                IReadOnlyList <Acl>         acls = this.TranslateZkprAclListToRMAclList(cr.Acls);
                CreateMode cm = this.TranslateZkprCreatFlagsToRmCreateMode(cr.Flags);
                ringMasterRequest = new RequestCreate(cr.Path, cr.Data, acls, cm);
                return(cr);

            case ZooKeeperRequestType.Create2:
                ZkprProtocolMessages.Create2 cr2   = this.DeserializeCreate2(xid);
                IReadOnlyList <Acl>          acls2 = this.TranslateZkprAclListToRMAclList(cr2.Acls);
                CreateMode cm2 = this.TranslateZkprCreatFlagsToRmCreateMode(cr2.Flags);
                ringMasterRequest = new RequestCreate(cr2.Path, cr2.Data, acls2, cm2);
                return(cr2);

            case ZooKeeperRequestType.SetData:
                ZkprProtocolMessages.SetData sd = this.DeserializeSetData(xid);
                ringMasterRequest = new RequestSetData(sd.Path, sd.Data, sd.Version);
                return(sd);

            case ZooKeeperRequestType.Delete:
                ZkprProtocolMessages.Delete dl = this.DeserializeDelete(xid);
                ringMasterRequest = new RequestDelete(dl.Path, dl.Version, false);
                return(dl);

            case ZooKeeperRequestType.Ping:
                ringMasterRequest = null;
                return(this.DeserializePing(xid));

            case ZooKeeperRequestType.CloseSession:
                ringMasterRequest            = null;
                sessionState.ConnectRecieved = false;     // Renegotiate the CreateSession
                return(this.DeserializeCloseSession(xid));

            case ZooKeeperRequestType.GetACL:
                ZkprProtocolMessages.GetACL ga = this.DeserializeGetACL(xid);
                ringMasterRequest = new RequestGetAcl(ga.Path, null);
                return(ga);

            case ZooKeeperRequestType.SetACL:
                ZkprProtocolMessages.SetACL sa      = this.DeserializeSetACL(xid);
                IReadOnlyList <Acl>         sa_acls = this.TranslateZkprAclListToRMAclList(sa.Acls);
                ringMasterRequest = new RequestSetAcl(sa.Path, sa_acls, sa.Version);
                return(sa);

            case ZooKeeperRequestType.Multi:
                ZkprProtocolMessages.Multi mu    = this.DeserializeMulti(xid);
                IReadOnlyList <Op>         rmOps = this.TranslateZkprOpsListToRmOpsList(mu.Ops);
                ringMasterRequest = new RequestMulti(rmOps, false);
                return(mu);

            case ZooKeeperRequestType.Auth:
                ZkprProtocolMessages.Auth au = this.DeserializeAuth(xid);
                ringMasterRequest = new RequestSetAuth(au.RmAuthId);
                return(au);

            case ZooKeeperRequestType.Check:
            case ZooKeeperRequestType.Sync:
            case ZooKeeperRequestType.Reconfig:
            case ZooKeeperRequestType.SetWatches:
            case ZooKeeperRequestType.RemoveWatches:
            case ZooKeeperRequestType.CreateContainer:
            case ZooKeeperRequestType.DeleteContainer:
            case ZooKeeperRequestType.Sasl:
            case ZooKeeperRequestType.Error:
            default:
                break;
            }

            return(null);
        }